如何将编译器标志仅限于(我的)本地库?
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}
)
我正在尝试以下示例:
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}
)