2013-04-06 7 views
1

I ++ 소스 파일을 내 C를 구축하는 CMake를 사용하기 시작 내가 inicially 빌드 할 때, 나는 이상한 comportament를 참조하십시오CMake의 depend.make 파일 빈

'cmake를 ../'디렉토리 구조를 GERATE 것

' '아무것도

분명 할 것이다'확인 'RE 없습니다 cmake ../' 이

예상대로, 어떤 연속적인 make 명령은 아무것도를 구축하지 않습니다 모든

구축 할 것 '만들

cmake_minimum_required(VERSION 2.6) 

set(CMAKE_CXX_COMPILER "g++") 
set(CMAKE_CXX_FLAGS "-Wall -pipe") 

set(var_target CommonBase) 
set(var_path_source base) 
project(Prj_${var_target}) 

file(GLOB_RECURSE var_sources ${var_path_source}/*.cpp) 
add_library(${var_target} SHARED ${var_sources}) 

install(TARGETS ${var_target} DESTINATION ${PROJECT_SOURCE_DIR}/install) 

는 CMakeFiles '파일을 명령'../ cmake '처음에, 더 나은 상대 : BUILD

을 예상대로 어떤 연속 make 명령은 아무것도를 구축하지 않습니다

모든 내 CMakelists.txt입니다 /CommonBase.dir/depend.make '가 비어 있고 연속 make 명령이 파일 종속성 목록을 삽입합니다.

내 CMakelists.txt에 문제가 있습니까?

감사합니다.

답변

1

여기에는 몇 가지 문제가 있습니다.

실제 문제의 원인은 set(CMAKE_CXX_FLAGS ...)입니다. 전에 project 명령이 있습니다.

project 명령은 처음 실행될 때 많은 작업을 수행하며 실제로이 변수를 부작용으로 지 웁니다. 따라서 CMake의 첫 번째 실행시에는 컴파일러 플래그가 비어 있으며, 이후에 항상 set을 포함합니다. (두 번째로 CMake를 실행하면 make가 CMake를 다시 컴파일하지 않고 모든 것을 다시 컴파일합니다.) 효과를 볼 수 message들과의 project 전화를 포장

시도 :

message("CMAKE_CXX_FLAGS - ${CMAKE_CXX_FLAGS}") 
project(Prj_${var_target}) 
message("CMAKE_CXX_FLAGS - ${CMAKE_CXX_FLAGS}") 

이 (빌드 루트에) 당신의 CMakeCache.txt 파일을 삭제 한 후 반복 해 cmake ..를 실행합니다.

이 문제를 해결하려면 set(CMAKE_CXX_FLAGS ...)project 명령 다음으로 이동하십시오.

두 번째 문제는 CMAKE_CXX_COMPILER을 CMakeLists.txt에 설정하지 않는 것입니다. "Setting default compiler in CMake"아래의 주석을보고, 거기에 대한 링크는 CMake의 FAQ 항목 How do I use a different compiler?

+0

정말이에요! 원래 설정으로 "cmake .."를 두 번 호출하면 문제가 해결되어 "make"와 "cmake"의 다른 조합이 예상대로 실행됩니다! 귀하의 제안을 시도, 첫 번째 호출 출력은 CMAKE_CXX_FLAGS입니다 - ... CMAKE_CXX_FLAGS - 파이프 - 벽 - 을 ... 와 두 번째 통화 출력 CMAKE_CXX_FLAGS - -Wall -pipe CMAKE_CXX_FLAGS - (CMAKE_CXX_COMPILER "g ++") 내가 중복 세트를 제거합니다 ... 감사를 을 -pipe -Wall! – campisano