我想擁有的CMake 2.8.6的鏈接,以提高::使用下面的代碼program_options在我的CMakeLists.txtCMake的FIND_PACKAGE成功,但返回錯誤的路徑
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
名單:
/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
注意路徑額外lib64
。另外,路徑前面的-l標誌似乎缺失。
當運行CMake的它報告說,它正確地發現包和{$Boost_LIBRARIES}
變量似乎列出正確的庫:
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
這似乎是正確的。但運行make時它使用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後添加'SET(Boost_DEBUG 1)'在'FIND_PACKAGE'和'MESSAGE(「\ $ {Boost_LIBRARIES} - $ {Boost_LIBRARIES}」)'之前''。然後刪除您的CMakeCache.txt,運行CMake並將輸出作爲編輯粘貼到您的問題中。 – Fraser 2012-03-31 16:10:50
@Fraser它似乎找到正確的庫,這裏是輸出(也包括上面):'$ {Boost_LIBRARIES} - 優化; boost_program_options -mt-shared;調試; boost_program_options-mt-shared-debug' – CvW 2012-04-03 08:03:37
作爲一種解決方法,如何手動設置鏈接路徑? – CvW 2012-04-03 09:23:37