Tôi đang cố gắng để có CMake 2.8.6 liên kết để thúc đẩy :: program_options sử dụng đoạn mã sau vào CMakeLists.txt tôiCMake FIND_PACKAGE thành công nhưng trả về sai con đường
FIND_PACKAGE(Boost COMPONENTS program_options REQUIRED)
INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIR})
ADD_EXECUTABLE (segment segment.cpp)
TARGET_LINK_LIBRARIES (segment ${Boost_LIBRARIES})
Lệnh find dường như thành công nhưng đi thư mục sai cho trình liên kết. Các gói phần mềm là thực sự trong:
`/usr/lib64/libboost_program_options-mt.so.5`
nhưng CMakeFiles/segment.dir/link.txt
danh sách như sau:
/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ưu ý thêm các lib64
trong đường dẫn. Ngoài ra, cờ -l ở phía trước đường dẫn dường như bị thiếu.
Khi chạy CMake nó báo cáo rằng nó một cách chính xác tìm thấy gói, và biến {$Boost_LIBRARIES}
dường như liệt kê các libs đúng:
Boost found.
Found Boost components:
program_options
${Boost_LIBRARIES} - optimized;boost_program_options-mt-shared;debug;boost_program_options-mt-shared-debug
File CMakeCache.txt tạo bắt đầu với:
//The directory containing a CMake configuration file for Boost.
Boost_DIR:PATH=/usr/lib64/boost
//Boost include directory
Boost_INCLUDE_DIR:FILEPATH=/usr/include
Mà có vẻ là chính xác. Nhưng khi chạy làm cho nó sử dụng các đường dẫn trong link.txt ở trên và tôi nhận được lỗi:
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
Điều gì có thể gây ra thêm một tiểu phân này vào đường dẫn? Điều gì có thể gây ra link.txt được tạo theo cách này? Và làm thế nào để sửa chữa nó (hoặc làm việc xung quanh nó)?
Bạn có thể thêm 'SET (Boost_DEBUG 1)' trước 'FIND_PACKAGE' và' MESSAGE ("\ $ {Boost_LIBRARIES} - $ {Boost_LIBRARIES}") 'sau' FIND_PACKAGE' trong tệp CMakeLists.txt của bạn không. Sau đó xóa CMakeCache.txt của bạn, chạy CMake và dán đầu ra dưới dạng bản chỉnh sửa cho câu hỏi của bạn. – Fraser
@Fraser Dường như tìm đúng libs, đây là kết quả đầu ra (cũng được bao gồm ở trên): '$ {Boost_LIBRARIES} - được tối ưu hóa; boost_program_options-mt-shared; debug; boost_program_options-mt-shared-debug' – CvW
Như một giải pháp thay thế, làm cách nào để đặt đường dẫn liên kết theo cách thủ công? – CvW