수색…


기본 "pro"파일.

qmakeQt 프레임 워크와 함께 제공되는 빌드 자동화 도구입니다. CMakeGNU Autotools 같은 도구와 비슷한 기능을하지만 Qt 와 함께 사용하도록 특별히 설계되었습니다. 따라서 Qt 에코 시스템, 특히 Qt Creator IDE와 잘 통합됩니다.

Qt Creator 를 시작하고 File -> New File or Project -> Application -> Qt Widgets 응용 프로그램을 선택하면 Qt Creator 는 "pro"파일과 함께 프로젝트 스켈레톤을 생성합니다. "pro"파일은 파일을 생성하기 위해 qmake 에 의해 처리되며, 파일은 기본 빌드 시스템 (예 : GNU Make 또는 nmake )에 의해 처리됩니다.

프로젝트 이름을 "myapp"로 지정한 경우 "myapp.pro"파일이 나타납니다. 다음은 qmake 변수를 설명하는 덧글이있는 기본 파일의 모습입니다.

# Tells build system that project uses Qt Core and Qt GUI modules.
QT       += core gui

# Prior to Qt 5 widgets were part of Qt GUI module. In Qt 5 we need to add Qt Widgets module.
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

# Specifies name of the binary.
TARGET = myapp

# Denotes that project is an application.
TEMPLATE = app

# List of source files (note: Qt Creator will take care about this list, you don't need to update is manually).
SOURCES += main.cpp\
        mainwindow.cpp

# List of header files (note: Qt Creator will take care about this list).
HEADERS  += mainwindow.h

# List of "ui" files for a tool called Qt Designer, which is embedded into Qt Creator in newer versions of IDE (note: Qt Creator will take care about this list).
FORMS    += mainwindow.ui

빌드에서 소스 디렉토리 구조를 보존합니다 (문서화되지 않은 "object_parallel_to_source"옵션).

다른 하위 디렉토리에 소스 파일을 보관하여 프로젝트를 구성하려면 빌드 중에 qmake 가이 디렉토리 구조를 보존하지 않고 모든 ".o"파일을 단일 빌드 디렉토리에 보관한다는 것을 알아야합니다. 다음과 같이 서로 다른 디렉토리에 충돌하는 파일 이름이있는 경우 문제가 될 수 있습니다.

src/file1.cpp
src/plugin/file1.cpp

이제 qmake 는 빌드 디렉토리에 두 개의 "file1.o"파일을 작성하여 하나가 다른 파일로 겹쳐 쓰게 만듭니다. buld가 실패합니다. 이를 방지하기 위해 "pro"파일에 CONFIG += object_parallel_to_source 구성 옵션을 추가 할 수 있습니다. 그러면 qmake 는 소스 디렉토리 구조를 보존하는 빌드 파일을 생성합니다. 이렇게하면 빌드 디렉토리에 원본 디렉토리 구조가 반영되고 오브젝트 파일은 별도의 하위 디렉토리에 만들어집니다.

src/file1.o
src/plugin/file1.o

완전한 예.

QT += core
TARGET = myapp
TEMPLATE = app

CONFIG += object_parallel_to_source

SOURCES += src/file1.cpp \
           src/plugin/file1.cpp

HEADERS  += src/plugin/file1.h

object_parallel_to_source CONFIG 옵션은 공식적으로 문서화 되어 있지 않습니다 .

간단한 예 (Linux)

Window.h

#include <QWidget>

class Window : public QWidget
{
    Q_OBJECT
public:
    Window(QWidget *parent = Q_NULLPTR) : QWidget(parent) {}
}

main.cpp

#include <QApplication>
#include "Window.h"

int main()
{
    QApplication app;
    Window window;
    window.show();
    return app.exec();
}

example.pro

# The QT variable controls what modules are included in compilation.
# Note that the 'core' and 'gui' modules are included by default.
# For widget-based GUI applications, the 'widgets' module needs to be added.
QT += widgets  

HEADERS = Window.h # Everything added to the HEADER variable will be checked 
                   # to see if moc needs to run on it, and it will be run if
                   # so.

SOURCES = main.cpp # Everything added to the SOURCES variable will be compiled
                   # and (in the simple example) added to the resulting
                   # executable.

명령 행

# Assuming you are in a folder that contains the above files.
> qmake         # You can also add the example.pro file if needed
> make          # qmake creates a Makefile, this runs make on it.
> ./example     # The name of the executable defaults to the .pro file name.

SUBDIRS 예제

qmake의 SUBDIRS 기능은 각각 다른 라이브러리에 의존하는 라이브러리 세트를 컴파일하는 데 사용될 수 있습니다. 아래의 예제는 SUBDIRS 능력을 가진 변형을 보여주기 위해 약간 뒤얽힌 것입니다.

디렉토리 구조

다음 파일 중 일부는 간결함을 위해 생략 될 것입니다. 그것들은 non-subdir 예제와 같은 형식으로 가정 할 수 있습니다.

project_dir/
-project.pro
-common.pri
-build.pro
-main.cpp
-logic/
----logic.pro
----some logic files
-gui/
----gui.pro
----gui files

project.pro

이것은 예제를 가능하게하는 주요 파일입니다. 이것은 또한 명령 행에서 qmake로 호출 할 파일입니다 (아래 참조).

TEMPLATE = subdirs  # This changes to the subdirs function.  You can't combine 
                    # compiling code and the subdirs function in the same .pro
                    # file.

# By default, you assign a directory to the SUBDIRS variable, and qmake looks
# inside that directory for a <dirname>.pro file.
SUBDIRS = logic

# You can append as many items as desired.  You can also specify the .pro file
# directly if need be.
SUBDIRS += gui/gui.pro

# You can also create a target that isn't a subdirectory, or that refers to a
# different file(*).
SUBDIRS += build
build.file = build.pro # This specifies the .pro file to use
# You can also use this to specify dependencies.  In this case, we don't want 
# the build target to run until after the logic and gui targets are complete.
build.depends = logic gui/gui.pro

(*) subdirs 대상에 대한 다른 옵션에 대한 참조 문서참조 하십시오.

common.pri

#Includes common configuration for all subdirectory .pro files.
INCLUDEPATH += . ..
WARNINGS += -Wall

TEMPLATE = lib

# The following keeps the generated files at least somewhat separate 
# from the source files.
UI_DIR = uics
MOC_DIR = mocs
OBJECTS_DIR = objs

logic / logic.pro

# Check if the config file exists
! include( ../common.pri ) {
    error( "Couldn't find the common.pri file!" )
}

HEADERS += logic.h
SOURCES += logic.cpp

# By default, TARGET is the same as the directory, so it will make 
# liblogic.so (in linux).  Uncomment to override.
# TARGET = target

gui / gui.pro

! include( ../common.pri ) {
    error( "Couldn't find the common.pri file!" )
}

FORMS += gui.ui
HEADERS += gui.h
SOURCES += gui.cpp

# By default, TARGET is the same as the directory, so it will make 
# libgui.so (in linux).  Uncomment to override.
# TARGET = target

build.pro

TEMPLATE = app

SOURCES += main.cpp

LIBS += -Llogic -Lgui -llogic -lgui

# This renames the resulting executable
TARGET = project

명령 행

# Assumes you are in the project_dir directory
> qmake project.pro # specific the .pro file since there are multiple here.
> make -n2 # This makes logic and gui concurrently, then the build Makefile.
> ./project # Run the resulting executable.

라이브러리 예제

라이브러리를 만드는 간단한 예제 (실행 파일이 아니라 기본값). TEMPLATE 변수는 만들고있는 프로젝트의 유형을 지정합니다. lib 옵션을 사용하면 makefile에서 라이브러리를 빌드 할 수 있습니다.

library.pro

HEADERS += library.h
SOURCES += library.cpp

TEMPLATE = lib

# By default, qmake will make a shared library.  Uncomment to make the library 
# static.
# CONFIG += staticlib

# By default, TARGET is the same as the directory, so it will make 
# liblibrary.so or liblibrary.a (in linux).  Uncomment to override.
# TARGET = target

라이브러리를 만들 때 dll (기본값), staticlib 또는 CONFIG plugin 을 추가 할 수 있습니다.

기존 코드에서 프로젝트 파일 만들기

기존 소스 파일이있는 디렉토리가있는 경우 qmake-project -option과 함께 사용하여 프로젝트 파일을 작성할 수 있습니다.

MyProgram 폴더에 다음 파일이 들어 있다고 가정 해 보겠습니다.

  • main.cpp
  • foo.h
  • foo.cpp
  • bar.h
  • bar.cpp
  • subdir / foobar.h
  • subdir / foobar.cpp

그런 다음 호출하여

qmake -project

MyProgram.pro 파일이 다음 내용으로 생성됩니다.

######################################################################
# Automatically generated by qmake (3.0) Mi. Sep. 7 23:36:56 2016
######################################################################

TEMPLATE = app
TARGET = MyProgram
INCLUDEPATH += .

# Input
HEADERS += bar.h foo.h subdir/foobar.h
SOURCES += bar.cpp foo.cpp main.cpp subdir/foobar.cpp

이 간단한 예제 에서 설명한대로 코드를 작성할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow