2010-01-05 3 views
8

이전의 질문은 규칙과 종속성에 대해 약간 혼란 스러웠습니다. 다음 .pro 파일은 qmake가 실행될 때 'generated'디렉토리에있는 소스 파일이있는 경우 제대로 작동하는 makefile을 생성합니다.생성 된 코드에 대한 qmake 규칙

idl.target = generated/qmtest.h 
idl.commands = code_generator 
idl.config = no_link 
idl.depends = $$SOURCES $$HEADERS $$FORMS 

TEMPLATE  = app 
INCLUDEPATH += generated 
SOURCES  += generated/*.cpp 
PRE_TARGETDEPS += generated/qmtest.h 
QMAKE_EXTRA_UNIX_TARGETS += idl 

그러나 qmake를 실행하는 경우, 그에만 메이크 파일을 생성하고, PRE_TARGETDEPS & QMAKE_EXTRA_UNIX_TARGETS 내게 도움이되지 않습니다. qmake가 생성 된 /의 내용을 소스에 추가하는 makefile을 생성하려면 어떻게해야합니까?

답변

5

두 번 통과해야 할 수도 있습니다.

당신의 qmake를 파일에서

, 다음 줄을 추가하십시오 예를 들어 떠들썩한 파티를 사용합니다 (generated.pri 파일에 소스를 추가, 당신의 code_generator 스크립트의 끝에서, 그리고

include(generated/generated.pri) 

을하지만, 생각) 거의 모든 언어에 대해 동일합니다 :

rm generated/generated.pri 
for file in $(ls generated/*.cpp); do 
    echo "SOURCES += ${file}" >> generated/generated.pri 
done 

/generated.pri 생성 당신이 qmake를 파일을 실행 처음, 아마도 비어 있습니다. make를 실행하면 generated.pri 파일이 채워집니다. 두 번째로 make 파일 (소스 .pri 파일이 변경됨)을 다시 만든 다음 다시 컴파일합니다. 당신은 당신을 위해 두 번째 단계를 수행 할 다른 명령으로 주위를 돌아 다닐 수도 있습니다.

+0

감사합니다. 시스템 ($$ idl.commands)을 사용하여 qmake 중에 실행되도록 발전기를 강제 종료했습니다. 생성하는 makefile은 정확하고 대상에 출력을 추가 했으므로 아무 것도 아프지 않습니다. – swarfrat

4

나는 지금도 동일한 문제를 가지고 있지만, 생성 된 파일 하나만을 사용하는 것이 더 쉽습니다.

 
dummyfile.target = dummy.cpp 
dummyfile.commands = touch $$dummyfile.target 
QMAKE_EXTRA_TARGETS += dummyfile 
GENERATED_SOURCES += $$dummyfile.target 

은 아마 하나가 qmake를 루프로 그것을 밀어 수뿐만 아니라 여러 파일에 대한 적절한 목표를 생성 :이를 위해, 나는 소스 대신 GENERATED_SOURCES를 사용하여이를 달성하기 훨씬 간단한 방법을 발견했다.

+0

+ PRE_TARGET_DEPENDS + = dummyfile – arved

0

저는 강력하고 일반적인 것으로 생각되는 해결책을 생각해 냈습니다. qmake은 GNU Makefile을 생성합니다.

우리는 또한 Makefile.pri에서 언급 된 소스 및/또는 헤더를 생성하는 스크립트 generate_Makefile.pri.sh를 실행하는 것에 의해 생성됩니다 Makefile.pri라는 이름의 파일에있는 모든 추가 SOURCESHEADERS 과제를 가지고 말.

.pro 파일에 포함되도록이 파일을 빌드 시스템에서 자동으로 생성하기를 원합니다. 따라서 qmake은 해당 내용을 고려하고 적절한 종속성을 가진 Makefile을 생성 할 수 있습니다.

다음은 .pro 파일에 입력해야하는 내용입니다.

Makefile_pri.target = Makefile.pri 
Makefile_pri.commands = generate_Makefile.pri.sh 
Makefile_pri.depends = FORCE 

Makefile.target = $$MAKEFILE 
Makefile.depends = Makefile_pri 

include($$Makefile_pri.target) 

QMAKE_EXTRA_TARGETS = Makefile Makefile_pri 

이 방법 : 더 Makefile.pri 존재하지 않는 경우는

  1. 가, 다음이 생성됩니다; Makefile.pri 만들거나, 다음 qmake 실행 다시 갱신이 은 GNU Makefile을 생성 qmake에 의존하지만 같은 접근 나는 않습니다는 Makefile

로 말했다 재생, 계정으로 컨텐츠 소요됩니다

  • 경우 믿음은 다른 타깃 구축 시스템과도 일할 수 있도록 적응 될 수 있습니다.