gpt4 book ai didi

c++ - 在 QMake 中,仅当目标支持 C++20 时如何添加子目录?

转载 作者:行者123 更新时间:2023-12-04 07:32:33 35 4
gpt4 key购买 nike

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

tests/
component/
tst_component.cpp
cxx11/
cxx14/
cxx17/
cxx20/
我编译 tst_component.cpp在每个 cxxNN C++NN 中的子目录使用 CONFIG += c++NN .如果编译器支持所有这些(对于较旧的 qmake,1z 表示 17 和 2a 表示 20),这会很有效。但是在我们的 CI 上,我有一个编译器太旧了,无法理解 -std=c++2a选项 CONFIG+=c++2a添加到命令行,因此当编译器不支持(甚至是 c++20 的子集)时,我想有条件地排除 cxx20 子目录。
我知道
CONFIG(QT_CONFIG, c++2a):SUBDIRS += cxx20
但那是在测试 Qt 是否是在 C++20 模式下构建的,这不是我想要的。这就是我使用 atm 来通过 CI 获取更改的内容,但这当然意味着 C++20 模式实际上不会在 CI 上进行测试,直到有人安装了用 C++20 构建的 Qt。
有没有一种方法可以独立于 Qt 的构建方式,并且不涉及在构建系统中手动维护编译器版本白名单?
编辑:20210609 类似于配置测试:我尝试用 CONFIG+=c++2a 编译一些东西如果可行,是否设置了一些标志(例如 have_cxx20 ,让我可以说 have_cxx20:SUBDIRS+=cxx20 )?

最佳答案

qmake 有一个编译测试功能,你可以用它来编译一个带有一组定义的构建标志的简单源文件。见 https://doc.qt.io/qt-5/qmake-test-function-reference.html#qtcompiletest-test作为引用,这里是这样一个项目的骨架:

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
主项目/主项目.pro
load(configure)
qtCompileTest(test) {
message("CPP20 test passed")
} else {
message("CPP20 test failed")
}

TARGET = mainproject
SOURCES += main.cpp

关于c++ - 在 QMake 中,仅当目标支持 C++20 时如何添加子目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67878096/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com