2017-11-14 7 views
3

Qt 애플리케이션이 있습니다. 파일은 .pro이고 TEMPLATE = app입니다. 프로젝트의 하위 폴더 중 하나는 또 다른 Qt 프로젝트의 자식 서브 모듈입니다. 라이브러리의 컬렉션에는 .pro 파일 (TEMPLATE = subdirs)이 있습니다. 독립 프로젝트가 잘 컴파일 .lib 파일을 생성다른 Qt 프로젝트를위한 서브 모듈로 Qt 프로젝트

project/ 
    app.pro (TEMPLATE = app) 
    stuff/ 
    libs/ <-- git-submodule 
     libs.pro (TEMPLATE = subdirs) 
     lib1/ 
      lib1.pro (TEMPLATE = lib) 
     lib2/ 
      lib2.pro (TEMPLATE = lib) 

libs 등 : 같은

그래픽으로 같습니다. 그러나이 경우에 app.pro의 은 을에 서브 디렉토리로 포함시키고 싶지만, subdirs은 아니지만 app입니다. 어쩌면 SUBDIRS += askelibapp.pro에 쓰려는 시도가 아무런 효과가 없었던 것일 수 있습니다. 모두 내 목표는 app.pro의 빌드 폴더 안에 .lib 개의 파일을 가져 오는 것입니다. libs은 내 목표를 달성하기 위해 libs 프로젝트 내부에서 변경해야하는 것이 없기 때문에 git-submodule이라는 것을 강조합니다.

app.proTEMPLATE에서 subdirs으로 변경하면 작동하는 것으로 알고 있습니다. 편집

subdirs_proj/ 
    app/ 
    libs/ 

대신

app/ 
    libs/ 

: :하지만 정말 프로젝트 계층 구조는 다음 다른 중첩 수준을 달성하기 때문에이 일을 더 어렵게 만들 것이기 ​​때문에 무엇을 원하는 아니다 이 clerify 내 이유 :

제 목표는 프로젝트 트리를 최대한 명확하게 만드는 것입니다. github에서 프로젝트를 복제 할 때 디렉토리에 들어가고 최상위 수준에서 app.pro을 확인하십시오. 모든 것이 명확하고 쉽고 아름답습니다. 그리고 당신이 이상한 subdirs.pro 상단에 보이지만 실제 프로젝트는 app 하위 디렉토리에 있습니다. 그리고 여러분의 이름이 applibs과 같이 명백하지 않은 경우 주 응용 프로그램 하위 폴더를 라이브러리 하위 폴더와 혼동 할 가능성이 있습니다.하지만 torpedo과 같은 것입니다 및 helios. 희망은 내 생각을 분명히합니다 :)

+0

샘플 리포를받을 수 있습니까? –

+0

@TarunLalwani 네, 물론, [this one] (https://github.com/AskePit/Memory)입니다. 여기에'subdirs', 라이브러리 디렉토리와'src' 디렉토리 인 맨 위에'Memory.pro'가 있습니다. 이전에는 라이브러리 사용 전에'src' 디렉토리에 필요가 없었으며'Memory.pro'는 실제 응용 프로그램의'pro' 파일이었습니다. 어느 것이 더 편리 했습니까? –

+0

환경 변수를 사용하는 방법은 어떻습니까? 환경 변수를 사용하여'TEMPLATE = $$ (TEMPLATE_ENV)'와 같은 값을 얻고, 그 값이 [empty]이면 (https://stackoverflow.com/questions/13803893/test-if-a-variable-is) -empty-and-give-default-value-of-qmake)를 사용하면 기본값을 지정할 수 있습니다. 그런 다음 기본 프로젝트를 빌드하는 동안 해당 환경 변수를 내보내고 참조 라이브러리 프로젝트의 값을 대체 할 수 있습니까? 나는 qmake 전문가가 아니므로 일부 가정은 틀릴 수도 있지만 이것이 의미가 있는지 알 수 있습니다. –

답변

7

당신은 이미 답변을 가지고 : 최상위 프로젝트 subdir 프로젝트를 만듭니다.

나는 왜 그것을 피하기를 원하며 그것이 혼란 스럽다는 것을 알지 못합니다. IMHO, 하위 디렉터리가있는 app 프로젝트가있는 경우 하위 디렉터리가있는 subdir 프로젝트보다 더 혼란 스럽습니다.

그리고 나는 폴더 수준을 제거하면 응용 프로그램에서 서브 디렉토리가있는 것을 보완하지 못한다고 생각합니다. .pro. TEMPLATE=app 프로젝트 하나만 빌드한다고 가정하면 프로젝트에 참여하는 새로운 개발자를 생각해보십시오. 그러나 그렇지 않습니다. 프로젝트가 "명확하고 쉽고 아름답다"는 의미가 아니며 최소한의 경악 원칙에 위배됩니다.

project-a/project-a.pro (subdirs) 
     /cli-app/cli-app.pro (app) 
     /gui-app/gui-app.pro (app) 
     /core-lib/core-lib.pro (lib) 
     /3rd-party/3rd-party.pro (subdirs) 
     /3rd-party/somelib/somelib.pro (lib) 

나는 폴더 수준을 제거하기 위해 프로젝트 형식 덤비는 것보다 그것을 명확하게 찾을 수 :

나는 정기적으로 다음과 같은 구조를 가지고 프로젝트를 가지고있다. 그리고 개발자들이 각 하위 폴더가 무엇인지 알지 못한다면 아마도 무엇인지 설명하는 README 파일을 던져야 할 것입니다.

또한 Qt 프로젝트 자체를 살펴볼 수 있습니다. 많은 .pro 파일이 있지만 하위 디렉토리가 포함 된 앱 프로젝트가 없으면 볼 수 있습니다. 그리고 나는 그것이 큰 프로젝트를 위해 특히 명확하다고 생각합니다.