我与CMake的麻烦不断地使D复杂化:
我的想法是创建我的项目,这样当我构建它时,它会运行单元测试,如果单元测试失败,它会在单元测试失败后自行清理。否则,如果成功,构建会将可运行的可执行文件放入run/目录中。
项目根目录下的CMakeLists.txt
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/
set(SRC
main.cpp)
target_sources(${BIN} PUBLIC ${SRC})和标头
#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的细节。
发布于 2021-07-29 16:33:04
这里有几个关于组织CMake文件的问题。这至少可以让你走上正确的道路
add_library(${BIN}_lib)和add_executable(${BIN}_run),但是在您的子CMake文件中,您正在调用target_sources(${BIN} ...) -目标名称被计算为字符串-没有名为BIN的目标(或者在本例中设置为BIN的值),并且将源添加到名为BIN的目标不会将这些源传播到名为BIN_lib的目标,而C++编译器的include搜索路径用于添加条目,而不是用于添加包含源/其他CMake文件的其他目录。为此,您似乎已经了解到,您需要add_subdirectories(...)https://stackoverflow.com/questions/68574707
复制相似问题