を返します::私のCMakeLists.txtに次のコードを使用してprogram_optionsCMakeのFIND_PACKAGEは私が後押しするCMakeの2.8.6のリンクを持ってしようとしている成功したが、間違ったパス
FIND_PACKAGE(Boost COMPONENTS program_options REQUIRED)
INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIR})
ADD_EXECUTABLE (segment segment.cpp)
TARGET_LINK_LIBRARIES (segment ${Boost_LIBRARIES})
findコマンドが成功するようだが、合格しますリンカーに間違ったディレクトリ。次
`/usr/lib64/libboost_program_options-mt.so.5`
しかしCMakeFiles/segment.dir/link.txt
リスト:パス内の余分なlib64
/cm/shared/apps/gcc/4.4.6/bin/c++ CMakeFiles/segment.dir/segment.cpp.o -o segment -rdynamic /usr/lib64/lib64/libboost_program_options-mt.so.5 -lpthread -lrt -Wl,-rpath,/usr/lib64/lib64
注パッケージが実際にあります。また、パスの前にある-lフラグが欠落しているようです。
CMakeのを実行している場合は、それが正しくパッケージを見つけ、{$Boost_LIBRARIES}
変数が正しいLIBSを一覧表示するようだと報告し:
Boost found.
Found Boost components:
program_options
${Boost_LIBRARIES} - optimized;boost_program_options-mt-shared;debug;boost_program_options-mt-shared-debug
生成CMakeCache.txtファイルで始まる:
//The directory containing a CMake configuration file for Boost.
Boost_DIR:PATH=/usr/lib64/boost
//Boost include directory
Boost_INCLUDE_DIR:FILEPATH=/usr/include
それは正しいと思われる。しかし、実行している場合は、それが上記のlink.txtでパスを使用しますと、私はエラーを取得する:
make[2]: *** No rule to make target `/usr/lib64/lib64/libboost_program_options-mt.so.5', needed by `segment'. Stop.
make[1]: *** [CMakeFiles/segment.dir/all] Error 2
make: *** [all] Error 2
パスにサブディレクトリのこの余分な注入を引き起こす可能性がありますか?このようにしてlink.txtが生成される原因は何ですか?そして、私はそれを修正する(または回避する)方法はありますか?
CMakeLists.txtに 'FIND_PACKAGE'と' FIND_PACKAGE'の後に 'MESSAGE(" \ $ {Boost_LIBRARIES} - $ {Boost_LIBRARIES} ")'を追加できますか?次に、CMakeCache.txtを削除し、CMakeを実行して出力をあなたの質問の編集として貼り付けます。 – Fraser
@Fraser正しいライブラリが見つかったようです。ここには出力もあります(上記も含まれています): '$ {Boost_LIBRARIES} - 最適化; boost_program_options-mt-shared; debug; boost_program_options-mt-shared-debug' – CvW
回避策として、手動でリンクパスを設定するにはどうすればよいですか? – CvW