2011-05-20 15 views

Respuesta

43

Depende un poco de lo que quiere:

A) Si desea especificar qué bibliotecas vincular, se puede utilizar para encontrar find_library libs y luego usar link_directories y target_link_libraries a.

Por supuesto, es a menudo vale la pena el esfuerzo de escribir un buen guión find_package, que muy bien añade bibliotecas "importados" con add_library(YourLib IMPORTED) con ubicaciones correctas, y la plataforma/construcción pre- y sufijos específicos. Luego puede simplemente referirse a 'YourLib' y usar target_link_libraries.

B) Si desea especificar marcadores del enlazador en particular, p. Ej. '-mthreads' o '-Wl, - export-all-symbols' con MinGW-GCC, puede usar CMAKE_EXE_LINKER_FLAGS. También hay dos banderas similares pero sin papeles para los módulos, compartidos o bibliotecas estáticas:

CMAKE_MODULE_LINKER_FLAGS 
CMAKE_SHARED_LINKER_FLAGS 
CMAKE_STATIC_LINKER_FLAGS 
+3

Y CMAKE_STATIC_LINKER_FLAGS para la biblioteca estática: http://www.cmake.org/cmake/help/v3.0/variable/CMAKE_STATIC_LINKER_FLAGS.html – Cofyc

+0

Sólo un enlace a la reciente descripción CMake3.0: [CMAKE_EXE_LINKER_FLAGS] (https: //cmake.org/cmake/help/v3.0/variable/CMAKE_EXE_LINKER_FLAGS.html). Tenga en cuenta que los indicadores MODULE/SHARED/STATIC ya están documentados (aunque bastante vagamente). – yman

+0

¿Para qué sirve la bandera del Módulo? – CMCDragonkai

17

Mira:

CMAKE_EXE_LINKER_FLAGS 
CMAKE_MODULE_LINKER_FLAGS 
CMAKE_SHARED_LINKER_FLAGS 
CMAKE_STATIC_LINKER_FLAGS 
2

Para enlazarse contra las librerías ver Andre's answer.

Para banderas enlazador - los siguientes 4 variables: CRealice

CMAKE_EXE_LINKER_FLAGS 
CMAKE_MODULE_LINKER_FLAGS 
CMAKE_SHARED_LINKER_FLAGS 
CMAKE_STATIC_LINKER_FLAGS 

se puede manipular fácilmente para diferentes configuraciones (depuración, liberación ...) con el ucm_add_linker_flags macro de ucm

3

si quieres agregar una marca a cada enlace, por ejemplo -fsanitize=address, entonces no recomendaría usar CMAKE_*_LINKER_FLAGS. Incluso con todos ellos configurados, aún no usa la bandera al vincular un framework en OSX, y tal vez en otras situaciones. En su lugar use link_libraries():

add_compile_options("-fsanitize=address") 
link_libraries("-fsanitize=address") 

Esto funciona para todo.

+0

¿Es necesario add_compile_options si solo quiero establecer indicadores de enlazador? – thomastiger

+0

No ............. – Timmmm

+0

Esa es, por ahora, la mejor y más limpia forma de hacerlo. – Salamandar

Cuestiones relacionadas