2017-10-27 15 views
1

実験/ファイルシステムを使用しようとしています。残りのフラグの後ろに-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にこれをやる方法があることを願っています。

+0

[CMakeのでは "-l"(エル)コンパイラフラグを追加する方法]の可能な重複(https://stackoverflow.com/questions/43136418/how-to-add-l-:単純にこれを行いますell-compiler-flag-in-cmake) – Tsyvarev

+0

@Tsyvarevあなたはそれが重複しているのは正しいかもしれませんが、私がこの質問を書いたときに私はそれが私の質問に答えたのか分かりませんでした。 (私はそれを見ました) –

答えて

3

ライブラリーにリンクしたいのであれば、CMakeにそれについて伝えてください。そして、CMakeに関する限り、ブラックボックスです。

target_link_libraries(YourExeTarget stdc++fs) 
+0

私はこれをやっていないと信じられない - ありがとう! –

+0

できるだけ早く回答を受け付けます。 –

関連する問題