2010-01-13 2 views
3

의 나는 이미 .build 디렉토리에 CMake를 실행 한 프로젝트가 있다고 가정 해 봅시다 :바이너리 디렉토리에 cmake 변화가

cd .build 
make 
: 빌드를 실행하는

project/ 
    .build/ 
    .src 

가 현재 나는이 작업을 수행해야합니다

나는

make -f ./build/Makefile 

와 아마, 내 프로젝트의 루트에서 make를 실행 할 수 있도록하고 싶습니다하지만 그것은 작동하지 않습니다. 내가 CMake 생성 된 메이크 파일은 작업 디렉토리가 (.build)에 상주하는 위치와 동일한 가정하기 때문에이

make[1]: CMakeFiles/Makefile2: No such file or directory 
make[1]: *** No rule to make target `CMakeFiles/Makefile2'. Stop. 
make: *** [all] Error 2 

이 같은 오류가 얻을.

makefile이 makefile이 작업 디렉토리를 상주하는 위치로 변경하도록 makefile을 생성하도록 할 수 있습니까?

답변

0

또 다른 방법은 같은 내용의 뭔가 당신이에서 make를 실행하려는 디렉토리에 다른 Makefile을 생성하는 것입니다 .

저는 cmake가 어느 위치에서나 실행할 수있는 Makefile을 생성하는 방법이 없다고 생각합니다. 그것은 make가 일반적으로 어떻게 사용되는지가 아닙니다.

그러나 당신이 CMakeLists.txt에 다음과 같은 몇 가지 cmake로, 프로젝트의 루트 디렉토리에 추가 도우미 메이크 파일을 생성에 cmake 동축 할 수 있습니다 필요한 경우

configure_file(ProjectRootMakefile.in ${CMAKE_SOURCE_DIR}/Makefile @ONLY) 

(그 "$ 교체

all: 
     cd @[email protected]; make $(MFLAGS) 
: 프로젝트 루트 디렉토리에 해결하는 식)

와 {CMAKE_SOURCE_DIR} "그리고 당신은 같은 내용으로, 소스 트리에서 파일 ProjectRootMakefile.in을 작성해야

이것은 프로젝트 루트 Makefile의 템플릿으로 사용됩니다. ("cd"앞에 공백이 아닌 탭 문자를 사용하십시오.)

나는이 제안을 테스트하지는 않았지만, 여기에 충분한 아이디어가 있어야합니다.

+0

이것은 흥미로운 아이디어입니다 ... CMake가 모든 타겟을 최상위 메이크 파일에 집어 넣는 방법에 대한 생각은 무엇입니까? – paleozogt

+0

기존 학교에서 사용중인 빌드 프로세스 사용을 고려해 볼 수 있습니다. 요즘에는 사용되지 않지만 이전에는 표준이었습니다. CMakeLists.txt 파일을 프로젝트 루트 디렉터리에 둡니다. "ccmake -i.", "make", "make what anything"및 "make install"이 바로 여기에 있습니다. 당신의 소스는 바이너리와 섞일 것이고, 순수 주의자는 푸 푸 푸를 먹을 것이다. –

7

기본 디렉토리가 어디인지 확인해야합니다. cmake를 변경할 필요가 없습니다. 그런 다음 당신은 그냥 최상위 디렉토리에서 "make"를 입력 한 수

all: 
     cd ./build; make $(MFLAGS) 

:

make -C your_build_directory 
+0

이 방법은 모든 디렉토리에서 make 할 수 있고 탭 완료를 포함하여 모든 대상에 대해 정상적으로 액세스 할 수 있기 때문에 유용합니다. –