it-swarm.dev

¿Cómo configurar los LDFLAGS en CMakeLists.txt?

Puse el CFLAGS en CMake por CMAKE_C_FLAGS. ¿Es algo así para configurar LDFLAGS?

57
paykoob

Depende un poco de lo que quieras:

A) Si desea especificar a qué bibliotecas vincular, puede usar find_library para buscar librerías y luego usar link_directories y target_link_libraries to.

Por supuesto, a menudo vale la pena el esfuerzo de escribir un buen find_package script, que agregue bibliotecas "importadas" con add_library (YourLib IMPORTED) con las ubicaciones correctas y los sufijos y precisos específicos de la plataforma/construcción . Luego puede simplemente referirse a 'YourLib' y usar target_link_libraries.

B) Si desea especificar indicadores de vinculador particulares, por ejemplo, '-mthreads' o '-Wl, - export-all-symbols' con MinGW-GCC, puede usar CMAKE_EXE_LINKER_FLAGS . También hay dos indicadores similares pero no documentados para módulos, bibliotecas compartidas o estáticas:

CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS
47
André

Mirar:

CMAKE_EXE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS
20
tibur

Si desea agregar una marca a todos enlace, por ejemplo. -fsanitize=address entonces no recomendaría usar CMAKE_*_LINKER_FLAGS. Incluso con todos ellos configurados, todavía no usa la bandera al vincular un marco 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.

5
Timmmm

Puede especificar indicadores de vinculador en target_link_libraries .

5
Simon

Para enlaces contra bibliotecas ver la respuesta de Andre .

Para las banderas del enlazador - las siguientes 4 variables CMake:

CMAKE_EXE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS

se puede manipular fácilmente para diferentes configuraciones (depurar, liberar ...) con ucm_add_linker_flags macro of ucm

4
onqtam