【问题标题】:Confusion on how CMake places binaries关于 CMake 如何放置二进制文件的困惑
【发布时间】: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


    【解决方案1】:

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

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

    要么将你的目标放在主目录中,我认为这很糟糕。最好使用build/src 或给它一个更有意义的名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 2014-04-11
      相关资源
      最近更新 更多