2011-12-08 2 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) 

I을 빌드 디렉토리에서 CMake를 다음과 같이 실행하십시오. Cmake ../ 이렇게하면 st 범위 파일 구조 내가 알아낼 수없는 올바른 것 같습니다. 먼저 ../build/CMakeFiles 폴더를 만듭니다. 이것은 예상했던 것입니다. 하지만 ../build/Grid 폴더를 만들고이 폴더 내에 example1.dir 폴더가 들어있는 다른 CMakeFiles 폴더가 있습니다. 서브 디렉토리의 순서를 바꾸면 어떤 그리드가 첫 번째이고 두 번째는 그 반대가 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

관련 문제