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)
使用 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)