我最近开始尝试使用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的文件夹中。为什么看起来安装什么都不做呢? 另外,如果我有多个复杂的子目录怎么办? 如何在避免文件的同时写出我的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(可执行$ {SOURCE_FILES})?或者使用多个CMakeLists.txt是否有更简单的方法?
答案 0 :(得分:1)
您误解了install
命令。它用于安装您的文件,例如make install
。
配置项目时,CMake将模仿项目的结构。这意味着所有文件夹都在相同的结构中创建,并且二进制文件显示在相应的构建目录中。
将你的目标放在主目录中,我认为这个目标是不好的。最好使用build/src
,或者给它一个更有意义的名字。