Я пытаюсь использовать ссылку CMake 2.8.6 для boost:: program_options, используя следующий код в CMakeLists.txt
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 таким образом? И как мне исправить (или обойти его)?