如何将编译器标志仅限于(我的)本地库?

How to limit compiler flags only to a (my) local library?

我正在尝试以下示例:

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

我认为问题是编译器警告,这是编译文件 my_code.cpp.

时包含的 thirdPartyLib 头文件生成的

如果您希望您的编译器不从包含的第三方头文件生成警告,您可以在 gcc/clang 中将它们作为 "system headers" 包含(命令行选项 -isystem 而不是-I).

要在 CMake 中执行此操作,请使用 target_include_directories 中的 SYSTEM 选项:

target_include_directories(mylib
    SYSTEM
        PUBLIC ${thirdPartyLib_INCLUDE_DIRS}
)