CMakeLists.txt添加代表命名空间的子文件夹(仅适用于组织)

时间:2016-01-09 13:12:00

标签: c++ cmake

考虑以下设置:

-project
--src
---CMakeLists.txt
---main.cpp
---Application.cpp
---Application.hpp
---subfolder
----SomeClass.cpp
----SomeClass.hpp
--bin

考虑这个CMakeLists.txt

project(SampleProject)
cmake_minimum_required(VERSION 2.8)

aux_source_directory(. SRC_LIST)

# Include directories
INCLUDE_DIRECTORIES("subfolder")

# Executable
add_executable(${PROJECT_NAME} ${SRC_LIST})

现在,只要我将所有课程都放在同一个文件夹(src)中,一切都运转良好。

但是现在我想重新构建我的应用程序。我想构建一个表示命名空间的文件夹层次结构。

当然,在我的包含中,我会使用

#include "subfolder/SomeClass.hpp"

但它并没有这样做。我查看了联机帮助页,但在CMake中有很多选项,而且它经常谈论拥有自己的CMakeLists.txt的独立库......我还没那么远。我只是想添加一个子文件夹,这就是全部。

到目前为止,我已经将QMake用于我的C ++项目,但我现在想深入了解CMake。

那里有没有有用的教程?我找到了一些,但他们没有涵盖基础知识。

2 个答案:

答案 0 :(得分:1)

使用aux_source_directory主要用于与模板相关的事情。此外,通常的做法是使用顶级CMakeLists.txt,其中包含更多文件,具有常见的项目设置等。

<project>
|
+- CMakeLists.txt
|
+- src/
   |
   +-- CMakeLists.txt
   |
   +-- main.cpp
   |
   …

所以这看起来像:

CMakeLists.txt(Project dir):

project(SampleProject)
cmake_minimum_required(VERSION 2.8)

include_directories(src) # Add 'src' to include paths
subdirs(src) # Includes the 'src' directory and its cmake file

# ...

现在您可以按预期使用包含路径。

CMakeLists.txt(src目录):

# Better add src files this way:
add_executable(${PROJECT_NAME} main.cpp Application.cpp)

subdirs(subfolder) # TODO: handle subfolder

可以通过链接到可执行文件的其他库目标添加子文件夹。通常那里有另一个CMakeLists.txt文件。

还要确保更新了cmake缓存;最好重新创建它。

答案 1 :(得分:1)

推荐的方法是对现有的每个子目录使用CMakeLists.txt。如果你想拥有子目录并组织它们而不必创建多个CMakeLists.txt文件,你可以在主目录中创建一个包含这些内容的文件:

project(SampleProject)
cmake_minimum_required(VERSION 2.8)

include_directories(src)
file(GLOB_RECURSE SRC_LIST *.c* *.h*)

# Executable
add_executable(${PROJECT_NAME} ${SRC_LIST})