首页 > 解决方案 > 在现代 CMake 中设置全局选项?

问题描述

我正在使用 cmake 构建我的库,其中包括 google-test 的子目录(子模块)。作为 CI 管道的一部分,我正在运行 msan(clang 内存清理程序),这需要我使用一些特殊选项(-fsanitize=memory -stdlib=libc++ -L/path/to/libc++/lib -I/path/to/libc++/include...)来构建整个项目(包括 google 测试)。

现在,我只是使用CMAKE_CXX_FLAGS和一个全局include_directories来设置所有 lib/include 路径。但是,这违反了“现代 cmake”准则。这是对全局变量的适当使用,还是有另一种方法可以使用目标使其正常工作?我可以为我的图书馆做这件事,但它不会传播到 google-test 并且我得到链接错误。

标签: c++cmakecompiler-flags

解决方案


您正在寻找的选项的现代 cmake 用法是add_compile_options()以及target_include_directories,您可以在其中为指定的目标项目指定公共和私有包含。

希望这可以帮助。


推荐阅读