Как ограничить флаги компилятора только (моей) локальной библиотекой? - PullRequest
2 голосов
/ 07 января 2020

Я пытаюсь пример ниже:

add_library(
        mylib
        src/my_code.cpp)

target_include_directories(mylib
        PUBLIC include ${catkin_INCLUDE_DIRS} ${thirdPartyLib_INCLUDE_DIRS})

add_dependencies(
        mylib
        ${mylib_EXPORTED_TARGETS}
        ${catkin_EXPORTED_TARGETS})


target_link_libraries(mylib
        PUBLIC
        ${thirdPartyLib_LIBRARY} ${catkin_LIBRARIES})

target_compile_options(mylib PRIVATE -Werror -Wall -Wextra)

Проблема в том, что параметры компиляции также распространяются на thirdPartyLib, но они нужны мне только для mylib.

1 Ответ

1 голос
/ 08 января 2020

Я думаю, что проблема в предупреждениях компилятора, которые генерируются включенными заголовочными файлами thirdPartyLib при компиляции файла my_code.cpp.

Если вы хотите, чтобы ваш компилятор не генерировал предупреждения из включенного стороннего заголовка файлы, вы можете, например, в gcc / clang включить их как «системные заголовки» (опция командной строки -isystem вместо -I).

Чтобы сделать это в CMake, используйте опцию SYSTEM в target_include_directories:

target_include_directories(mylib
    SYSTEM
        PUBLIC ${thirdPartyLib_INCLUDE_DIRS}
)
...