CLion 中的嵌套 CMakeLists.txt 个文件

Nested CMakeLists.txt files in CLion

使用 CLion,我的项目结构如下所示:

你会看到在根目录下有一个include目录,一个src目录,一个lib目录,一个cmake-build-debug目录,一个CMakeLists.txt 文件(见红色箭头)和一个 tests 目录。该项目使用根级别 CMakeLists.txt 文件和各种源文件、头文件和外部文件将共享对象构建到 lib 中。

我可以成功 运行 根级 CMakeList.txt 文件并构建库。到目前为止,还不错。

问题来了。除了上述之外,我现在有兴趣——在非正式的、探索性的基础上——测试项目中的一些代码。为此,作为初始示例,我创建了一个 test_nnls 目录,其中包含自己的 CMakeLists.txt(见黄色箭头)文件和一个 test_nnls.cpp 文件。 test_nnls.cpp 中的代码创建一些虚拟数据,调用 src/nnls.cpp 中的函数并打印结果。这里的构建过程只是创建一个执行此操作的可执行文件。这种方法并不意味着成为任何正式测试框架的一部分,我不希望测试 运行 作为根级构建的一部分。这只是我在整个项目中添加了一个简单的测试程序,当我觉得需要时,我想在独立的基础上编译和 运行。我计划稍后可能会实现一个正式的测试框架,但目前我不知道该怎么做,现在只需要打印一些简单的输出来查看所选代码是否正常工作。

问题是我似乎无法执行 CMakeLists.txt 文件(黄色箭头)来构建测试。在 CLion 中似乎无法使用 cmake 为测试程序设置构建。我如何构建所有这些以获得我想要的东西?谢谢。

您没有执行 CMakeLists.txt。它由 CLion 调用的 cmake(根 CMaksLists.txt 文件)读取。但是,CLion 仅将根 CMaksLists.txt 文件传递​​给 cmake。即使您自己调用 cmake,您也只会传递此根 CMaksLists.txt 文件。

如果您想在位于其他文件夹中的其他 CMaksLists.txt 文件中定义目标(或任何内容),则必须将 add_subdirectory(folder_name_that_contains_another_CMakeLists_file) 添加到您的根 CMaksLists.txt 文件中。只有这样,这些其他 CMaksLists.txt 文件中的目标才会出现在 CLion 中。

请注意,一些内容应该出现在根 CMaksLists.txt 文件中,但不会出现在其他文件中。特别是,下面两行应该只在根文件中

cmake_minimum_required(VERSION 3.14)  # Choose the minimum cmake version
project(name_of_your_project)