我有一个程序需要在其顶层
CMakeLists.txt
:
set(CMAKE_CXX_STANDARD 11)
这个不能碰。我使用 catch2 框架向该项目引入了单元测试,并创建了需要 std::filesystem 的集成测试。但这需要更高的C++标准。 所以我添加了
tests/CMakeLists.txt
:
set(CMAKE_CXX_STANDARD 17)
set(headers
catch.hpp
)
set(source
main.cpp
date_test.cpp
climate_test.cpp
)
...
但这并不能解决问题。这还有可能吗?或者您还有其他建议吗?显然,让人们升级他们的 C++ 需要付出很大的努力,这样我就可以在任何地方提升版本。但测试很重要,我希望它们在我们的 CI 服务器上运行。
感谢您的任何提示!
在这种情况下,仅使用
set
是不够的。但是,您可以使用以下方法将诸如 CMAKE_CXX_STANDARD
之类的内容单独分配给每个目标:
set_property(TARGET FooLib PROPERTY CXX_STANDARD 17)
其中
FooLib
将是您测试的目标。