- Цель библиотеки интерфейсов MyProjectInterfaces (определяет некоторые интерфейсы в файлах hpp)
- Библиотека MyProjectFoo (реализует 1/2 интерфейсов в MyProjectInterfaces)
- Библиотека MyProjectBar (реализует другая половина интерфейсов в MyProjectInterfaces)
Я хочу добавить некоторые функции/параметры/определения компиляции ко всем целям в моем проекте, минимизируя при этом код дублирование. Я знаю два способа сделать это.
МЕТОД 1: Самый простой способ — добавить их в MyProjectInterfaces с областью действия INTERFACE:
Код: Выделить всё
set(DEBUG_COMPILE_OPTIONS
-Wall -Werror
)
set(RELEASE_COMPILE_OPTIONS
)
target_compile_features(MyProjectInterfaces INTERFACE
cxx_std_17
)
target_compile_definitions(MyProjectInterfaces INTERFACE
SDK_VERSION_MAJOR=${CMAKE_PROJECT_VERSION_MAJOR}
SDK_VERSION_MINOR=${CMAKE_PROJECT_VERSION_MINOR}
SDK_VERSION_PATCH=${CMAKE_PROJECT_VERSION_PATCH}
)
target_compile_options(MyProjectInterfaces INTERFACE
$
$
)
Код: Выделить всё
macro(set_options myTarget)
target_compile_features(${myTarget} PRIVATE
cxx_std_17
)
target_compile_definitions(${myTarget} PRIVATE
SDK_VERSION_MAJOR=${CMAKE_PROJECT_VERSION_MAJOR}
SDK_VERSION_MINOR=${CMAKE_PROJECT_VERSION_MINOR}
SDK_VERSION_PATCH=${CMAKE_PROJECT_VERSION_PATCH}
)
target_compile_options(${myTarget} PRIVATE
$
$
)
endmacro()
# This probably won't work or be necessary because its an interface library target?
# set_options(MyProjectInterface)
# Set compile options on actual compiled libraries
set_options(MyProjectFoo)
set_options(MyProjectBar)
В Интернете много документации о том, как передать PRIVATE/
Код: Выделить всё
PUBLIC/INTERFACEПодробнее здесь: https://stackoverflow.com/questions/734 ... et-in-cmak
Мобильная версия