Build 创建一个奇怪的目录结构

Build 创建一个奇怪的目录结构,build,cmake,subdirectory,Build,Cmake,Subdirectory,我是CMake的新手,对CMake创建的文件的组织方式有问题 首先,我将详细介绍文件树。我试图用一个示例程序从两个源目录(网格和示例)和一个构建目录构建一个简单的库。所以,我有三个CmakeLists.txt文件。因此,顶部目录如下所示:CMakeLists.txt、/Grid、/examples和/build 此CMakeLists.txt包含: project(talyfem) cmake_minimum_required(VERSION 2.8.4) set(CMAKE_CXX_FLAGS

我是CMake的新手,对CMake创建的文件的组织方式有问题

首先,我将详细介绍文件树。我试图用一个示例程序从两个源目录(网格和示例)和一个构建目录构建一个简单的库。所以,我有三个CmakeLists.txt文件。因此,顶部目录如下所示:CMakeLists.txt、/Grid、/examples和/build

此CMakeLists.txt包含:

project(talyfem)
cmake_minimum_required(VERSION 2.8.4)
set(CMAKE_CXX_FLAGS "-g")
add_subdirectory(examples Grid) 
在网格文件夹CmakeLists.txt中:

add_library(${PROJECT_NAME} FEMElm.cpp Grid.cpp GridField.cpp SuperGrid.cpp SuperGrid3D.cpp)
set(EXAMPLES example1)
foreach(example ${EXAMPLES})
   add_executable(${example} ${example}.cpp)
  target_link_libraries(${example} ${PROJECT_NAME})
endforeach(example)
示例文件夹CmakeLists.txt中有:

add_library(${PROJECT_NAME} FEMElm.cpp Grid.cpp GridField.cpp SuperGrid.cpp SuperGrid3D.cpp)
set(EXAMPLES example1)
foreach(example ${EXAMPLES})
   add_executable(${example} ${example}.cpp)
  target_link_libraries(${example} ${PROJECT_NAME})
endforeach(example)
我从构建目录中运行CMake,作为:CMake/ 当我这样做时,它会创建一个奇怪的文件结构,我无法理解,而且似乎不正确。首先,它创建一个../build/cmakfiles文件夹,这是我所期望的。但是,它会创建一个../build/Grid文件夹,该文件夹中还有另一个CMakeFiles文件夹,其中包含一个example1.dir文件夹。如果我切换子目录的顺序,哪个网格在前,哪个示例在后,相反的情况发生在Grid.dir位于examples子目录中

这似乎不正确,我将感谢任何帮助解决这个问题


我希望../build/CMakeFiles应该包含Grid.dir和examples.dir文件夹。

错误在于您使用
添加子目录的方式。发件人:

添加子目录(源目录[二进制目录] [从所有中排除])

因此,当您给出
add_subdirectory
两个参数时,第一个参数被解释为源目录,第二个参数被解释为构建此源的目录

您需要调用
add_子目录
两次:

add_subdirectory(examples)
add_subdirectory(Grid)

错误在于您使用
添加\u子目录的方式。发件人:

添加子目录(源目录[二进制目录] [从所有中排除])

因此,当您给出
add_subdirectory
两个参数时,第一个参数被解释为源目录,第二个参数被解释为构建此源的目录

您需要调用
add_子目录
两次:

add_subdirectory(examples)
add_subdirectory(Grid)

我有一份Mastering CMake的副本,所以如果答案在那里,我只需要一个页码。我有一份Mastering CMake的副本,所以如果答案在那里,我只需要一个页码。