2011-04-29 2 views
1

나는 그것에 관한 모든 게시물을 읽었으며 아무 해결책도 Windows와 Linux에서 작동하지 않습니다. 나의 현재의 솔루션은 윈도우에서 꽤 잘 작동한다. 존재하지 않는다면, 디버그 나 릴리즈를위한 각각의 디렉토리를 만든다.qmake .pro 파일을 사용하여 디버그/출력 출력 dir을 변경하는 방법. 크로스 플래폼

이 폴더 중 하나에 내 모든 개체 파일 (* .o)을 만들려고합니다. Windows에서 나는 리눅스에서 DESTDIR 변수가 비어 있습니다. = |

TEMPLATE = app 
TARGET = 
DEPENDPATH += . 
INCLUDEPATH += . 

# Input 
HEADERS += Config.h \ 
      keyboard.h \ 
      keyboardgui.h \ 
      keyboardkey.h \ 
      Log.h \ 
      main.h \ 
      mainwindow.h \ 
      Settings.h 
FORMS += mainwindow.ui 
SOURCES += Config.cpp \ 
      keyboard.cpp \ 
      keyboardgui.cpp \ 
      keyboardkey.cpp \ 
      Log.cpp \ 
      main.cpp \ 
      mainwindow.cpp 
RESOURCES += Resources.qrc 

OTHER_FILES += \ 
    default_layout.kl 


# se for Windows 
win32 { 
# inclui a lib para acessar o DMI 
LIBS += -lqaxcontainer 
} 

# Habilita a opcao de copia de diretorios 
CONFIG += copy_dir_files 

Debug:DESTDIR = debug 
Release:DESTDIR = release 

# copia a pasta configuracao para o diretorio de saida 
win32 { 
QMAKE_POST_LINK += copy /Y default_layout.kl $$DESTDIR 
} 
else { 
QMAKE_POST_LINK += cp -a default_layout.kl $$DESTDIR 
} 

나는 INSTALL var을 사용하려고했지만 성공하지는 못했습니다. 디버그 디렉토리가 생성되고 모든 오브젝트 파일이 저장되지만 컴파일 모드를 RELEASE로 변경하면 오브젝트 파일이 계속 디버그 디렉토리로 이동되고 RELEASE 디렉토리가 생성되지 않습니다 (다시 qmake를 실행하려고 시도했습니다) . 두 구성에서 내 파일 (default_layout 및 레이아웃)은 출력 디렉토리에 복사되지 않습니다.

# Habilita a opcao de copia de diretorios 
CONFIG += copy_dir_files 

release:DESTDIR = release 
release:OBJECTS_DIR = release/ 
release:MOC_DIR = release/ 
release:RCC_DIR = release/ 
release:UI_DIR = release/ 

debug:DESTDIR = debug 
debug:OBJECTS_DIR = debug/ 
debug:MOC_DIR = debug/ 
debug:RCC_DIR = debug/ 
debug:UI_DIR = debug/ 

INSTALLS += config_files 
config_files.path = $$DESTDIR 
config_files.filename = default_layout.kl 
config_files.filename += layout.kl 

thx!

답변

3

"Windows에서 작동하는 이유는 리눅스에서"작동하지 않는 이유는 "디버그"와 "릴리스"를 대문자로 사용하기 때문입니다. 모든 예제에서 소문자로 표시되어 있습니다 (이 섹션의 두 번째 예제는 qmake document page을 참조하십시오.)

다른 질문은 DESTDIRS를 사용하는 것입니다. DESTDIRS는 qmake에게 TARGET을 넣을 위치를 알려줍니다. 오브젝트 파일 만 놓을 위치를 직접 제어하려면 OBJECT_DIRS을 사용해야합니다.

개인적으로 qmake의 INSTALLS 키워드를 사용하여 이동해야하는 곳에 여분의 파일을 복사합니다. makemake install을 모두 실행하지만 더 많은 플랫폼 종속 코드를 생성한다는 의미입니다. 난 당신이 TARGET와 '디버그'또는 '릴리스'의 개체를 원하는 가정하면

,이 같은 그것을 할 것입니다 : 당신이 QtCreator를 실행하는 경우

# Habilita a opcao de copia de diretorios 
debug { 
    DESTDIR = debug 
    OBJ_DIR = debug 
} 
release 
{ 
    DESTDIR = release 
    OBJ_DIR = release 
} 

# copia a pasta configuracao para o diretorio de saida 
config_files.path = $$DESTDIR 
config_files.files = default_layout.kl 
INSTALLS += config_files 

, 당신은에 make install 단계를 추가 할 수 있습니다 왼쪽 도구 모음에서 "프로젝트"아이콘을 선택하여 건물 설정을 변경하십시오. 다음으로 "Build Step 추가", "Make"를 선택하고 "Make arguments"를 install으로 설정하십시오. 각 빌드 구성에 대해이 작업을 수행해야합니다.

+0

내가 한 말대로, 내 게시물을 결과와 함께 편집했습니다. 한 가지 더 질문, 바로 결과를 얻으려면 bash에서 make install을 실행해야합니까? QtCreator와 빌드 단계에서 어떻게 동일한 작업을 수행 할 수 있는지 알고 있습니까? – MaikoID

+0

QtCreator의 빌드 프로세스에'make install '을 추가하는 한 가지 방법으로 내 대답을 업데이트했습니다. – jwernerny

+0

@MaikoID 개정 된 qmake 파일에 두 가지 문제점이 있습니다. 먼저 "config_files._filename_"을 "config_files._files_"로 변경해야합니다. 두 번째는 이전이 아닌 config_files를 정의한 후에 INSTALLS 행이 있어야한다는 것입니다. – jwernerny