2012-02-27 1 views
2

모든 .h 및 .cpp 파일이 포함 된 프로젝트가 하나 있습니다. 이 프로젝트는 내 응용 프로그램을 빌드합니다. 다른 프로젝트에는 첫 번째 프로젝트와 동일한 .h 및 .cpp 파일이 필요한 모든 유닛 테스트가 있습니다. 따라서 매번 첫 번째 프로젝트에 새 파일을 추가 할 때마다 두 번째 프로젝트에도이 파일을 추가해야합니다. 따라서이 단계를 자동화하려고했습니다. 그것이 나던에서 모든 소스와 작업 헤더와 잘 작동하는 동안,문서화되지 않은 파일 (glob) 함수와 함께 "대상을 만들 규칙이 없습니다 ..."오류

HEADERS += \ 
    someotherstuff.h \ 
    files(../Core/DriveProgramInterface/*.h) \ 
    files(../Core/DriveProgramWizard/*.h) 

SOURCES += \ 
    someotherstuff.cpp \ 
    files(../Core/*.cpp) \ 
    files(../Core/DriveProgramInterface/*.cpp) \ 
    files(../Core/DriveProgramWizard/*.cpp) 

그래서이 들어
나는 파일과 같이 기본적으로 보이는 (글로브)로 qmake의 기능을 사용하기 위해 노력했다.

No rule to make target 'files(../Core/DriveProgramWizard/.cpp), needed by 'debug/.o'. Stop


그래서 내 Makefile을 보면서 I've이 발견 : 내가 컴파일 할 때 나는 다음과 같은 오류가

그래서 미안 생각은, 어쩌면 문제가
SOURCES  = \ 
     someotherstuff.cpp \ 
     files(..\Core\*.cpp) \ 
     files(..\Core\DriveProgramInterface\*.cpp) \ 
     files(..\Core\DriveProgramWizard\*.cpp) \ 

    OBJECTS  = \ 
     someotherstuff.cpp \ 
     debug/*.o \ 
     debug/*.o \ 
     debug/*.o \ 

을, glob가 MakeFile에서 해결되지 않았지만 대신 * .o 파일을 생성하려고합니다. 나는 그것이 정말로 옳다면 정말로 조금은 확신 할 수 없다. 그래서 왜 이것이 작동하지 않는 다른 이유가 있다면, 나를 가리켜 주도록 자유롭게 느낀다.
또한 파일() 기능을 사용하여 또는 사용하지 않고이 작업을 수행하는 방법에 대한 제안이 있으면 매우 감사하겠습니다.

답변

3

최근에 qmake가 특별히 globbing 기능을 필요로하지 않고 * .cpp와 같은 간단한 표현식을 자동으로 확장한다는 것을 알게되었습니다.

그래서 나는이에 SOURCES 라인을 변경 제안 : 단지 추가하는 경우에

SOURCES += someotherstuff.cpp 
SOURCES += ../Core/*.cpp 
SOURCES += ../Core/DriveProgramInterface/*.cpp 
SOURCES += ../Core/DriveProgramWizard/*.cpp 
+0

편집 : 매력처럼 작동합니다. 고마워요. – LarissaGodzilla

0

을 : SOURCES += ../OtherDir/*.cpp 작업 및 생성 된 Makefile을 실행하면 해당 불평하지 않습니다 같은에서

No rule to make target '/../OtherDir/*.cpp', needed by 'release/*.o' [or 'debug/*.o'] 

을 이 경우 해결 방법은 와일드 카드 *가있는 경로를 따라 $$qoute($$PWD/...)을 묶는 것입니다. * :

SOURCES += $$quote($$PWD/../OtherDir/*.cpp) 
HEADERS += $$quote($$PWD/../OtherDir/*.h) 

이렇게하면 작업 Makefile이 생성되고 빌드가 성공적입니다.

나는 한 슈퍼 프로젝트에 중첩 된 하위 프로젝트 (ITS 프로젝트 .PRO 파일에 TEMPLATE=subdir와 즉 프로젝트)에 *.cpp/*.h를 추가 할 때 사례 중 하나라고 생각합니다.

Windows/MinGW32 플랫폼에서 작업 중이며 문제가 플랫폼과 관련되었을 수 있음을 언급하는 데 도움이 될 수 있습니다.