Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Конечно, часто стоит написать хороший find_package script, который красиво добавляет "импортированные" библиотеки с add_library (YourLib IMPORTED) с правильными местоположениями и предварительными и суффиксами платформы/сборки. Затем вы можете просто ссылаться на "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

Ответ 2

Посмотрите:

CMAKE_EXE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

Для флагов компоновщика - следующие 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