【发布时间】:2016-11-03 09:18:29
【问题描述】:
我最近开始尝试使用 CMake,并用 C++ 编写了一个简单的Hello, World 程序。
这是我的目录结构:
CMakeLists.txt
src/
CMakeLists.txt
main.cpp
build/
顶层 CMakeLists.txt 内容如下:
#Require at least CMake version 2.8
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
#set up the project name, version and language to compile in
project(HelloWorld)
#tell CMake that we have some source files located in the src directory
add_subdirectory(src)
/src 中的 CMakeLists.txt 内容如下:
add_executable(helloworld
main.cpp)
install(TARGETS helloworld
RUNTIME DESTINATION ../build)
现在,我希望这两个脚本会导致 makefile 在 /build 目录中创建 helloworld 二进制文件,但运行 make 后,它会在 /build/src 中创建 helloworld 二进制文件。
如果我将 add_executable 和 install 函数调用移动到顶级 CMakeLists.txt 中,那么 helloworld 二进制文件将放在 /build,而不是 /build/src。
因此,据我了解,它将构建放置在与调用 CMake 的位置相关的文件夹中。那么,为什么看起来 install 似乎什么也没做呢? 此外,如果我有多个复杂的子目录怎么办? 我应该如何写出我的 CMakeLists.txt 同时避免文件(GLOB ...)?
例如;
CMakeLists.txt
/build
/src
/class_A
a.hpp
a.cpp
/class_B
b.hpp
b.cpp
/class_CB
cb.hpp
cb.cpp
/class_D
d.hpp
d.cpp
我是否只有一个巨大的 .cpp 文件列表,所有文件都有每个 cpp 文件的相对路径,然后将该列表传递给 add_executable(executable ${SOURCE_FILES})?或者有没有更简单的方法来使用多个 CMakeLists.txt?
【问题讨论】:
标签: cmake