Estoy tratando de tener CMake 2.8.6 enlace para impulsar :: program_options utilizando el siguiente código en mi CMakeLists.txtCMake FIND_PACKAGE tiene éxito pero devuelve camino equivocado
FIND_PACKAGE(Boost COMPONENTS program_options REQUIRED)
INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIR})
ADD_EXECUTABLE (segment segment.cpp)
TARGET_LINK_LIBRARIES (segment ${Boost_LIBRARIES})
El comando find parece tener éxito, pero pasa el directorio incorrecto al enlazador. El paquete es realmente en:
`/usr/lib64/libboost_program_options-mt.so.5`
pero CMakeFiles/segment.dir/link.txt
enumera los siguientes:
/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
Nota extra lib64
en el camino. Además, la bandera -l en frente de la ruta parece estar perdida.
Al ejecutar CMake se informa que se encuentra correctamente el paquete, y la variable {$Boost_LIBRARIES}
parece una lista de las bibliotecas correctas:
Boost found.
Found Boost components:
program_options
${Boost_LIBRARIES} - optimized;boost_program_options-mt-shared;debug;boost_program_options-mt-shared-debug
El archivo generado CMakeCache.txt comienza con:
//The directory containing a CMake configuration file for Boost.
Boost_DIR:PATH=/usr/lib64/boost
//Boost include directory
Boost_INCLUDE_DIR:FILEPATH=/usr/include
Lo cual parece ser correcto. Pero cuando se ejecuta hacen utiliza la ruta en link.txt arriba y me sale el error:
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
Lo que podría causar esta inyección adicional de un subdirectorio en el camino? ¿Qué podría causar que se genere link.txt de esta manera? ¿Y cómo lo soluciono (o lo soluciono)?
Puede agregar 'SET (Boost_DEBUG 1)' antes de 'FIND_PACKAGE' y' MESSAGE ("\ $ {Boost_LIBRARIES} - $ {Boost_LIBRARIES}") 'después de' FIND_PACKAGE' en su CMakeLists.txt. Luego borre su CMakeCache.txt, ejecute CMake y pegue el resultado como una edición de su pregunta. – Fraser
@Fraser Parece encontrar las libs correctas, aquí está la salida (también incluida anteriormente): '$ {Boost_LIBRARIES} - optimizada; boost_program_options-mt-shared; debug; boost_options_program-mt-shared-debug' – CvW
Como solución alternativa, ¿cómo configuro la ruta del enlace manualmente? – CvW