为单元测试指定不同的 CMAKE_CXX_STANDARD

问题描述 投票:0回答:1

我有一个程序需要在其顶层

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 服务器上运行。

感谢您的任何提示!

c++ cmake cmakelists-options
1个回答
0
投票

在这种情况下,仅使用

set
是不够的。但是,您可以使用以下方法将诸如
CMAKE_CXX_STANDARD
之类的内容单独分配给每个目标:

set_property(TARGET FooLib PROPERTY CXX_STANDARD 17)

其中

FooLib
将是您测试的目标。

© www.soinside.com 2019 - 2024. All rights reserved.