CMake: Как установить LDFLAGS в CMakeLists.txt?


Я установил CFLAGS в CMake по CMAKE_C_FLAGS. Это что-то вроде этого, чтобы установить LDFLAGS?

5 53

5 ответов:

Это зависит немного от того, что вы хотите:

A) если вы хотите указать, на какие библиотеки ссылаться, вы можете использовать find_library найти библиотеки, а затем использовать link_directories и target_link_libraries для.

конечно, это часто стоит того, чтобы написать хороший find_package скрипт, который красиво добавляет "импортированные" библиотеки с add_library (импортированный YourLib) С правильного места, и платформа / построить конкретные пре-и суффиксы. Затем вы можете просто обратиться к YourLib и использовать target_link_libraries.

B) если вы хотите указать определенные флаги компоновщика, например '-mthreads' или '- Wl,--export-all-symbols' с MinGW-GCC, вы можете использовать CMAKE_EXE_LINKER_FLAGS. Есть также два похожих, но недокументированных флага для модулей, общих или статических библиотек:

CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS

посмотреть:

CMAKE_EXE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS

вы можете указать флаги компоновщика в target_link_libraries.

для связывания с библиотеками см. Андрэ.

для флагов компоновщика - следующие 4 переменные CMake:

CMAKE_EXE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS

можно легко манипулировать для различных конфигураций (debug, release...) с помощью ucm_add_linker_flags макрос ucm

если вы хотите добавить флаг к каждый ссылка, например:-fsanitize=address тогда я бы не рекомендовал использовать CMAKE_*_LINKER_FLAGS. Даже если все они установлены, он по-прежнему не использует флаг при связывании фреймворка на OSX и, возможно, в других ситуациях. Вместо этого используйте link_libraries():

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

это работает для всего.