2011-12-08 90 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