문제

나는 나의 초기 질문이 규칙과 의존성에 대해 약간 혼란 스러웠다는 것을 깨달았습니다. 다음 .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

이 방법:

  1. 없다면 Makefile.pri, 그런 다음 만들어집니다.
  2. 만약에 Makefile.pri 그러면 생성되거나 업데이트됩니다 qmake 다시 실행하여 콘텐츠를 고려하여 재생 Makefile

말했듯이, 이것 하다 의지하다 qmake GNU Makefile을 생성하지만 다른 대상 빌드 시스템과도 적응할 수 있다고 생각하는 것과 동일한 접근 방식이 적합 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top