2011-12-08 38 views
1

我是CMake的新手,并且遇到了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) 

中的示例文件夹中的CMakeLists.txt是:

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

我从build目录运行CMake:Cmake ../ 当我这样做时,它会创建一个st范围文件结构,我无法弄清楚,似乎不正确。首先,它创建一个../build/CMakeFiles文件夹,这是我所期望的。但是,它会创建一个../build/Grid文件夹,并在此文件夹中是另一个CMakeFiles文件夹,然后它将包含一个example1.dir文件夹。如果我切换子目录的顺序,首先使用Grid和Example第二个例子,而Grid.dir则处于例子子目录中。

这似乎不正确,我将不胜感激在解决此问题的任何帮助。

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

+0

我掌握CMake的副本,因此,如果答案是在那里我只需要一个页码。 – slaughter98

回答

4

错误在于您使用add_subdirectory的方式。从CMake Docs

add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])

所以,当你给add_subdirectory两个参数的第一个被解释为源目录,第二个为目录,此源应该建立。

你想要的是调用add_subdirectory两次:

add_subdirectory(examples) 
add_subdirectory(Grid) 
+0

谢谢,那是一个愚蠢的错误。 – slaughter98

+0

不客气,请打勾答复(除了我的答案之外的复选标记)。 – Kleist