关于CMake如何放置二进制文件的困惑

时间:2016-07-01 04:54:15

标签: cmake

我最近开始尝试使用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是否有更简单的方法?

1 个答案:

答案 0 :(得分:1)

您误解了install命令。它用于安装您的文件,例如make install

配置项目时,CMake将模仿项目的结构。这意味着所有文件夹都在相同的结构中创建,并且二进制文件显示在相应的构建目录中。

将你的目标放在主目录中,我认为这个目标是不好的。最好使用build/src,或者给它一个更有意义的名字。