2015-01-23 2 views
1

에 내가 '메이크 다음있어했습니다 : 이것은 잘 작동전환은 연타하는 ++ 메이크

all: xmltest 
xmltest: xmltest.cpp tinyxml2.cpp tinyxml2.h 

-make all 실행 실행 한 후'생산 'xmltest로합니다.

그러나 컴파일러를 clang ++로 전환하고 싶습니다. 그래서 파일의 시작 부분에이 라인을 추가했습니다 :

clang++  xmltest.cpp tinyxml2.cpp tinyxml2.h -o xmltest 
clang++.exe: warning: treating 'c-header' input as 'c++-header' when in C++ mode, this behavior is deprecated 
clang++.exe: error: cannot specify -o when generating multiple output files 
<builtin>: recipe for target 'xmltest' failed 
make: *** [xmltest] Error 1 

어떻게 원래 메이크업 파일에 최소한의 수정으로이 문제를 해결하는 :

CXX=clang++ 

지금 make all을 실행 오류가 발생합니다?

xmltest.cpp: tinyxml2.h 
tinyxml2.cpp: tinyxml2.h 

을 그리고 /가 번역을 연결 컴파일 :

+0

정확한 명령은 해당 행없이 실행 한 다음 그 행에서 실행됩니까? –

+0

@EtanReisner 문제의'make'의 출력을 – Kao

답변

2

당신은 번역 단위 같은 헤더 파일 (사람들이 CPPS 있습니다)

당신은 일반적으로 .H 전제 조건 확인해야 목록 안 단위 :

all: xmltest 

xmltest: xmltest.cpp tinyxml2.cpp 
    $(CXX) $(CXXFLAGS) -o [email protected] $^ $(LDFLAGS) 

IIRC 요 u는//도 |

xmltest: xmltest.cpp tinyxml2.cpp  | tinyxml2.h 
    $(CXX) $(CXXFLAGS) -o [email protected] $^ $(LDFLAGS) 

를 사용하여 같은 줄에있는 항목 '지정 의존성'을 넣을 수도 있지만 지금은

+0

@EtanReisner로 업데이트하여 문제를 해결했습니다. 무엇이 당신의 코멘트를 만드는지 ... :) – sehe

2

당신은뿐만 아니라 단지 쉘 스크립트를 작성할 수 있는지 확인 드릴 수 없습니다 :있다 솔루션에서 makefile을 사용할 때 이점이 없습니다. 당신이 어떤 파일을 변경할 때마다, 전체 일은 재건 될 것이다, 그래서 당신은뿐만 아니라 바로 실행할 수 있습니다

clang++ -g -o xmltest xmltest.cpp tinyxml2.cpp 

당신은 아무것도를 변경하고 메이크 파일을 건너 뛸 때마다. 당신이 메이크업의 일부 기능을 이용했다 메이크를 원한다면

, 당신은 그것을 다음처럼 작성할 수 있습니다 :

CXX = clang++ 
all: xmltest 
xmltest: xmltest.o tinyxml2.o 
xmltest.o tinyxml2.o: tinyxml2.h 

이제 뭔가 유용한 파일 만이이 필요을에 당신이 바꾼 것을 기반으로 재건 될 것입니다. 프로그램이 복잡해지면 관리 기능을 더 많이 사용하여 관리가 가능합니다.