実験/ファイルシステムを使用しようとしています。残りのフラグの後ろに-lフラグ*を追加します
私が最初にこれを追加することにより、CMakeのを通じて、私のプロジェクトに直接それを使用してみました:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lstdc++fs")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lstdc++fs")
これは長くて読みにくいエラー投げ、うまくいきませんでした:
CMakeFiles/miner.dir/Main.cpp.o: In function `main':
Main.cpp:(.text+0x33): undefined reference to `std::experimental::filesystem::v1::create_directories(std::experimental::filesystem::v1::__cxx11::path const&)'
CMakeFiles/miner.dir/Main.cpp.o: In function `std::experimental::filesystem::v1::__cxx11::path::path<char [6], std::experimental::filesystem::v1::__cxx11::path>(char const (&) [6])':
Main.cpp:(.text._ZNSt12experimental10filesystem2v17__cxx114pathC2IA6_cS3_EERKT_[_ZNSt12experimental10filesystem2v17__cxx114pathC5IA6_cS3_EERKT_]+0x73): undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
collect2: error: ld returned 1 exit status
CMakeFiles/miner.dir/build.make:123: recipe for target 'miner' failed
make[2]: *** [miner] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/miner.dir/all' failed
make[1]: *** [CMakeFiles/miner.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
を
とにかく私が何らかの理由でそれが実現するまで何が起こったのか分かりませんでした。ファイルシステムは静的ライブラリです。コマンドの最後には-lstdc++11
が必要でした。
小さなファイルでこれをテストしました。単純に<experimental/filesystem>
を含め、いくつかのディレクトリを作成しました(コードは重要ではありません)。
私はこれらのコマンドでそれを建て:
g++ -c test.cpp -lstdc++fs
g++ -o test test.o -lstdc++fs
これが働いていました。このため、私は、-lstdc++fs
が残りのコマンドを実行しなければならないと思うのは間違いないと確信しています。
私はその後、私の大きなcmakeのプロジェクトにmake VERBOSE=1
を使用し、それは私が何を望むかの反対をしていたことに気づいた。それは、コマンドのを開始で-lstdc++fs
を入れていました!
CMakeは自分が何をしているかを知っていると確信しています。これは私に何か間違っていると信じさせました。 experimental/filesystem
をコマンドの最後に置かずに使用する方法はありますか?そして、より良い方法がないなら、私はCMakeにこれをやる方法があることを願っています。
[CMakeのでは "-l"(エル)コンパイラフラグを追加する方法]の可能な重複(https://stackoverflow.com/questions/43136418/how-to-add-l-:単純にこれを行いますell-compiler-flag-in-cmake) – Tsyvarev
@Tsyvarevあなたはそれが重複しているのは正しいかもしれませんが、私がこの質問を書いたときに私はそれが私の質問に答えたのか分かりませんでした。 (私はそれを見ました) –