2016-07-08 3 views
6

더 큰 프로젝트에 포함될 C++ 프로젝트를 개발 중입니다.CMake 프로젝트에서 하나의 파일을 컴파일 하시겠습니까?

필자는 더 큰 프로젝트 (Qt 응용 프로그램이며 qmake에서 생성 됨)에서 특정 파일에 대한 상대 경로를 입력하면 linux 명령 줄에서 단일 파일을 컴파일 할 수 있음을 확인했습니다. make 할 인수.

한편, 나는 내 자신의 프로젝트에 CMake를 사용하고있다. 컴파일 유닛에 대한 일부 코드를 수정하고 헤더 파일을 수정해야 할 때 종속성을 컴파일하고 자체 소스 파일을 컴파일하는 데 오랜 시간을 기다려야합니다. 그러나 * .cc 파일의 소스 코드가 오류없이 컴파일 가능한지 여부를 확인하려는 경우가 있습니다.

Qake가 qmake와 같은 방식으로 Makefile에서 Makefile을 생성 할 수있는 방법이 있습니까? qmake로 전환하는 것은 더 이상 옵션이 아닙니다.

+0

시도가'현재 메이크 CMake가 생성에 help'을합니다. 나는 단지 하나의 객체 파일을 만드는 방법을 나열 할 것이라고 확신한다. – John

답변

3

아니요, CMake는 단일 파일을 컴파일하기위한 내장 지원을 제공하지 않습니다.

각 개체 파일에 대한 대상을 추가해야합니다. 디렉토리의 모든 파일을 반복하는 함수로 대상을 추가해야합니다.

3

기본 제공되지 않음. CMake는 메인 메이크 파일의 "내부"메이크 파일 규칙을 노출하지 않습니다.

CMake가 내부적으로 사용하는 파일 구조의 종류를 고려하는 경우에만이 작업을 수행 할 수 있습니다. 예 : 사용하여 단일 .obj 파일을 컴파일 CMake는 당신이 당신의 CMake 스크립트에 추가 지정 대상을 추가 할 필요가 없습니다

cmake_minimum_required(VERSION 3.1) 

project(myProg CXX) 

file(WRITE "main.cc" "int main()\n{\nreturn 0;\n}") 
add_executable(myProg main.cc) 
6

과 같이있을 때 메이크가 CMake에 의해 생성 된 메이크으로,

make -f CMakeFiles/myProg.dir/build.make CMakeFiles/myProg.dir/main.cc.obj 

를 호출 생성 이미 .cc 파일마다 .o 대상을 포함하고 있습니다. 예 : mySourceFile.cc이라는 소스 파일이있는 경우 빌드 디렉토리에 <Some Path>/mySourceFile.cc.o이라는 대상을 정의하는 Makefile이 있습니다. 빌드 디렉토리에 cd이있는 경우 grep 또는 ack-grep을 사용하여이 대상을 정의하는 Makefile을 찾은 다음 cd을 해당 Makefile의 디렉토리에 배치하고 빌드 할 수 있습니다.

예. 그런 다음을 수행하여 mySourceFile.cc.o을 구축 할 수 있습니다

foo/bar/Makefile 
119:x/y/z/mySourceFile.o: x/y/z/mySourceFile.cc.o 
123:x/y/z/mySourceFile.cc.o: 
124: # recipe for building target 

: 같은 명령 ack-grep mySourceFile.cc.o 인쇄 뭔가를 생각

cd foo/bar && make x/y/z/mySourceFile.cc.o 
관련 문제