문제
나는 나의 초기 질문이 규칙과 의존성에 대해 약간 혼란 스러웠다는 것을 깨달았습니다. 다음 .pro 파일은 QMake가 실행될 때 '생성 된'디렉토리의 소스 파일이 존재하는 경우 올바르게 작동하는 makefile을 생성합니다.
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가 실행되면 makefile 만 생성하고 pre_targetDeps & qmake_extra_unix_targets는 나를 도와주지 않습니다. QMake가 생성/ 소스에 생성 된 내용을 추가 할 makefile을 생성하도록하려면 어떻게해야합니까?
해결책
두 번의 패스 로이 작업을 수행해야 할 수도 있습니다.
Qmake 파일에 다음 줄을 추가하십시오.
include( generated/generated.pri )
그런 다음 code_generator 스크립트의 끝에서 소스를 생성 된.pri 파일에 추가합니다 (예제에는 bash를 사용하지만 거의 모든 언어에 대해서는 아이디어가 동일합니다).
rm generated/generated.pri
for file in $( ls generated/*.cpp ); do
echo "SOURCES += ${file}" >> generated/generated.pri
done
Qmake 파일을 처음 실행하면 생성/생성 .PRI는 아마도 비어있을 것입니다. Make를 실행하면 생성 된.pri 파일을 채 웁니다. 두 번째로, MAKE 파일을 재현 한 다음 (소스 .PRI 파일이 변경됨) 다시 컴파일합니다. 당신은 당신을 위해 두 번째 단계를 수행 할 다른 명령과 함께 바이올린을 만들 수 있습니다.
다른 팁
나는 지금 같은 문제를 겪었지만 단일 생성 파일의 더 간단한 usecase를 위해서. 이를 위해 소스 대신 generated_sources를 사용하여이를 달성 할 수있는 훨씬 간단한 방법을 찾았습니다.
dummyfile.target = dummy.cpp dummyfile.commands = touch $$dummyfile.target QMAKE_EXTRA_TARGETS += dummyfile GENERATED_SOURCES += $$dummyfile.target
아마도 그것을 qmake 루프로 푸시하고 여러 파일의 적절한 대상을 생성 할 수 있습니다.
나는 강력하고 일반적인 것으로 믿는 솔루션을 생각해 냈습니다. qmake
GNU makefile 생성.
우리 모두 추가가 있다고 가정 해 봅시다 SOURCES
그리고 HEADERS
이름이 지정된 파일의 할당 Makefile.pri
, 스크립트를 실행하여 생성됩니다 generate_Makefile.pri.sh
또한 언급 된 소스 및/또는 헤더도 생성합니다. Makefile.pri
.
우리는이 파일이 빌드 시스템 자체에 의해 자동으로 안정적으로 생성되기를 원하므로 .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
, 그런 다음 만들어집니다. - 만약에
Makefile.pri
그러면 생성되거나 업데이트됩니다qmake
다시 실행하여 콘텐츠를 고려하여 재생Makefile
말했듯이, 이것 하다 의지하다 qmake
GNU Makefile을 생성하지만 다른 대상 빌드 시스템과도 적응할 수 있다고 생각하는 것과 동일한 접근 방식이 적합 할 수 있습니다.