CMake: распространять опции компиляции по всему проекту - PullRequest
0 голосов
/ 14 декабря 2018

Допустим, я хочу скомпилировать весь код с помощью /W4 для проекта с тремя библиотеками / target s.

A -> B -> C

Как лучше всего применятьфлаг всего проекта?

Я могу придумать два подхода:

  1. Установить TARGET_COMPILE_OPTIONS(C PUBLIC "\W4") в CMake C (который является базовой библиотекой длявесь проект) и любая другая библиотека, которая зависит от C, унаследует флаг через: TARGET_LINK_LIBRARIES(B C) Pro: новые библиотеки будут наследовать флаг автоматически. Con: флаги компиляции для проекта неявны.

  2. Укажите параметры компиляции для каждой цели / библиотеки отдельно. Pro: флаги явно указаны и управляются отдельно для каждой библиотеки. Con: флаги должны быть (не забыты) установлены для новой библиотеки.

1 Ответ

0 голосов
/ 14 декабря 2018

Третий вариант, изменить флаги компилятора.

Например, когда я хочу активировать очиститель адресов для всего проекта, я делаю:

SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address -static-libasan")
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address -static-libasan")

Текущий идиоматический способ установкиФлаги для текущей папки и подпапки должны использовать

add_compile_options(-fsanitize=address) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...