考虑以下设置:
-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。
那里有没有有用的教程?我找到了一些,但他们没有涵盖基础知识。
答案 0 :(得分:1)
使用aux_source_directory
主要用于与模板相关的事情。此外,通常的做法是使用顶级CMakeLists.txt
,其中包含更多文件,具有常见的项目设置等。
<project>
|
+- CMakeLists.txt
|
+- src/
|
+-- CMakeLists.txt
|
+-- main.cpp
|
…
所以这看起来像:
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
# ...
现在您可以按预期使用包含路径。
# 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})