Linux 为什么cmake会创建一个';来源';我的构建目录中的目录?

Linux 为什么cmake会创建一个';来源';我的构建目录中的目录?,linux,compilation,makefile,cmake,Linux,Compilation,Makefile,Cmake,我对cmake有点失望,因为我正在努力学习它并正确使用它 以下是我的设置: 我有一个名为~/project的目录。在此目录中,我有: 生成目录 源代码目录 包括目录 CMakeLists.txt文件 此CMakeLists.txt文件的内容为: cmake_minimum_required(VERSION 2.8) project(myProject) subdirs(source) 我在~/project/source中还有另一个CMakeLists.txt,它的内容是: cmake_m

我对cmake有点失望,因为我正在努力学习它并正确使用它

以下是我的设置:

我有一个名为
~/project
的目录。在此目录中,我有:

  • 生成
    目录
  • 源代码
    目录
  • 包括
    目录
  • CMakeLists.txt
    文件
CMakeLists.txt
文件的内容为:

cmake_minimum_required(VERSION 2.8)
project(myProject)
subdirs(source)
我在
~/project/source
中还有另一个
CMakeLists.txt
,它的内容是:

cmake_minimum_required(VERSION 2.8)
include_directories("~/project/includes")
add_executable(exec entry.cpp)
现在,我进入构建目录,它是空的,然后执行
cmake..
。这个很好用。然而,我随后看到一个“源”目录被创建,如图所示

为什么要创建这个?我不知道发生了什么事。据我所知,它不应该这样做,它应该给我所有我在这里看到的,除了'源'目录


谢谢。

在构建目录中,CMake重新创建项目的整个目录结构。合理的做法是,保持项目结构。想象一个更大的项目,其中有几个层次的子文件夹和源、库和测试以有意义的方式分散。要运行测试,请遵循测试源所在的结构,只在build目录而不是source目录中

因为您的项目(至少就CMake所知)只是
source
子目录,所以仅创建此文件夹


如果您真的只有源代码项目,我不确定是否最好将CMake项目放在
source

中,谢谢您的回复。然而,据我所知,一旦运行了
make
,构建目录就应该容纳可执行文件。为什么要重新创建整个源结构?我不认为它应该这样做…它应该这样做,我只是无法找到一个好的来源为这一主张。如果在
~/project
~/project/source
中有可执行文件,它们在
~/project/build
~/project/build/source
中保持分离。正如我所说的,如果您在源代码<源代码>中只有源代码,您可以考虑将其作为CGEAR项目的根目录。因此,让我重新措辞。当我在build目录中运行
make
时,将在何处创建可执行文件?您可以自己尝试。我希望它位于
~/project/build/source
中。生成目录将填充生成所需的各种中间文件。对象文件、额外的makefile(或IDE项目文件)等。在源代码树之外构建的全部要点是将所有这些内容分开。