首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高度特定的cmake + qtCreator用例和单元测试的问题

问高度特定的cmake + qtCreator用例和单元测试的问题
EN

Stack Overflow用户
提问于 2021-07-29 18:58:59
回答 1查看 69关注 0票数 1

我与CMake的麻烦不断地使D复杂化:

我的想法是创建我的项目,这样当我构建它时,它会运行单元测试,如果单元测试失败,它会在单元测试失败后自行清理。否则,如果成功,构建会将可运行的可执行文件放入run/目录中。

项目根目录下的CMakeLists.txt

代码语言:javascript
复制
project(TaskFour LANGUAGES CXX)

enable_testing()

set(BIN ${CMAKE_PROJECT_NAME})

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED)



add_library(${BIN}_lib)
add_executable(${BIN}_run)

include_directories(sources headers tst/ut)

cmakelists在source/

代码语言:javascript
复制
set(SRC
    main.cpp)

target_sources(${BIN} PUBLIC ${SRC})

和标头

代码语言:javascript
复制
#contents of this list are empty by design for now
set(SRC
    "")

target_sources(${BIN} PUBLIC ${SRC})

使用这些CMake列表文件,QtCreator无法看到顶级CMake列表文件之外的任何内容。

我尝试使用add_subdirectory命令,这似乎很有帮助,因为它使所有子目录都显示出来。然而,我很快意识到,QtCreator似乎把每个子目录都当作自己的项目来对待,并且试图将文件添加到这些新奇的“项目”中会导致一条简单的“无法将一个或多个文件添加到项目foo”的消息。

在我将我的CMake文件作为一个大文件放在项目的根目录之前,我知道这并不好。

我当前在顶级cmakelists文件中做错了什么,导致qtCreator找不到项目中的文件?我如何编写CMake列表,以便它允许我使用QTest框架,甚至可以通过QtCreator的项目向导构建框架(因为目前将autotest项目添加为子项目的选项是灰色的)?

我们非常感谢您的任何见解,如果您愿意,可以随时深入了解CMake的细节。

EN

回答 1

Stack Overflow用户

发布于 2021-07-29 16:33:04

这里有几个关于组织CMake文件的问题。这至少可以让你走上正确的道路

  1. 您正在调用add_library(${BIN}_lib)和add_executable(${BIN}_run),但是在您的子CMake文件中,您正在调用target_sources(${BIN} ...) -目标名称被计算为字符串-没有名为BIN的目标(或者在本例中设置为BIN的值),并且将源添加到名为BIN的目标不会将这些源传播到名为BIN_lib的目标,而C++编译器的include搜索路径用于添加条目,而不是用于添加包含源/其他CMake文件的其他目录。为此,您似乎已经了解到,您需要add_subdirectories(...)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68574707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档