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

时间:2011-12-08 16:12:17

标签: 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 "-g")
add_subdirectory(examples Grid) 

在Grid文件夹中,CmakeLists.txt是:

add_library(${PROJECT_NAME} FEMElm.cpp Grid.cpp GridField.cpp SuperGrid.cpp SuperGrid3D.cpp)

在示例文件夹中,CmakeLists.txt是:

set(EXAMPLES example1)
foreach(example ${EXAMPLES})
   add_executable(${example} ${example}.cpp)
  target_link_libraries(${example} ${PROJECT_NAME})
endforeach(example)

我从构建目录运行CMake:Cmake ../ 当我这样做时,它创建了一个奇怪的文件结构,我无法弄清楚,似乎并不正确。首先,它创建一个../build/CMakeFiles文件夹,这是我所期望的。但是,然后它创建一个../build/Grid文件夹,在这个文件夹中是另一个CMakeFiles文件夹,然后包含一个example1.dir文件夹。如果我切换子目录的顺序,首先是Grid,而第二个是示例,那么Grid.dir在examples子目录中会发生相反的情况。

这似乎不正确,我将非常感谢您解决此问题。

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

1 个答案:

答案 0 :(得分:4)

错误与您使用add_subdirectory的方式有关。来自CMake Docs

  

add_subdirectory(source_dir [binary_dir]                      [EXCLUDE_FROM_ALL])

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

你想要的是两次致电add_subdirectory

add_subdirectory(examples)
add_subdirectory(Grid)