在QMake中,只有在目标支持C++20的情况下,我如何添加子目录



我想在所有可用的C++版本中运行我的单元测试,所以我有一个类似的目录结构

tests/
component/
tst_component.cpp
cxx11/
cxx14/
cxx17/
cxx20/

并使用CONFIG += c++NN在C++NN中的每个cxxNN子目录中编译tst_component.cpp。如果编译器支持所有这些(对于较旧的qmakes,1z表示17,2a表示20(,那么这就可以很好地工作。但在我们的CI中,我有一个编译器太老了,无法理解CONFIG+=c++2a添加到命令行中的-std=c++2a选项,所以当编译器不支持(甚至不支持(c++20时,我想有条件地排除cxx20 subdir。

我知道

CONFIG(QT_CONFIG, c++2a):SUBDIRS += cxx20

但这是在测试Qt是否是在C++20模式下构建的,这不是我想要的。这就是我使用的atm,通过CI进行更改,但这意味着,当然,在有人安装用C++20构建的Qt之前,C++20模式实际上不会在CI上进行测试。

有没有一种方法可以独立于Qt的构建方式,并且不需要手动在构建系统中维护编译器版本白名单?

编辑:20210609有点像配置测试:我试图用CONFIG+=c++2a编译一些东西,如果成功了,就会设置一些标志(比如have_cxx20,让我说have_cxx20:SUBDIRS+=cxx20(?

qmake有一个编译测试功能,您可以使用它编译一个具有定义的一组构建标志的简单源文件。看见https://doc.qt.io/qt-5/qmake-test-function-reference.html#qtcompiletest-测试以供参考,下面是这样一个项目的框架:

mainproject/
├── config.tests
│   └── test
│       ├── test.cpp
│       └── test.pro
├── main.cpp
└── mainproject.pro

mainproject/config.tests/test/test.pro:

SOURCES = test.cpp ## can be just a simple main() function, or even testing some c++20 specific features
QMAKE_CXXFLAGS+= -std=c++20

mainproject/mainproject.pro

load(configure)
qtCompileTest(test) {
message("CPP20 test passed")
} else {
message("CPP20 test failed")
}
TARGET = mainproject
SOURCES += main.cpp

相关内容

  • 没有找到相关文章

最新更新