我目前正在将我的 C++ 项目从简单地使用 Makefile 转换为使用 CMake。由于我不熟悉 CMake,我尽量避免学习“旧”CMake 并坚持“现代 CMake”最佳实践,例如此处描述的。
但是,我不知道如何包含一个简单的、仅包含标头的第三方库,而不会被有关该库的警告所困扰。
假设我有一个这样的项目结构:
CMakeLists.txt
src/
CMakeLists.txt
main.cpp
third-party-lib/
foo/
foo.h
说main.cpp
用途foo
:#include <foo.h>
问题是,我使用了一堆警告标志并foo.h
引入了一些我不关心的警告,因为我不是作者,这并不严重。
在经典的 Makefile 中,我只需在-isystem third-party-lib/foo
适当的地方编写并完成即可。
在 CMake 中,我通过include_directories(SYSTEM PRIVATE third-party-lib/foo)
顶级CMakeLists.txt
.
现在,根据上面的链接,我应该放手include_directories()
以避免隐藏的依赖关系,我认为这是一个好主意。我宁愿为每个实际需要foo
包含该库的目标指定并将其视为“不要在此处警告我”。据我了解,方法是:
foo
在顶层找到目标CMakeLists.txt
target_link_libraries(main PRIVATE foo)
左右src/CMakeLists.txt
我将如何实现这一点,即查找命令是什么,以及在哪里指定SYSTEM
属性?或有关如何解决此问题的任何其他建议?