qt5base-lts/qmake/doc/snippets/code/doc_src_qmake-manual.pro

990 lines
14 KiB
Prolog
Raw Normal View History

/****************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
#! [0]
make all
#! [0]
#! [1]
CONFIG += qt debug
#! [1]
#! [2]
QT += network xml
#! [2]
#! [3]
QT = network xml # This will omit the core and gui modules.
#! [3]
#! [4]
QT -= gui # Only the core module is used.
#! [4]
#! [5]
CONFIG += link_pkgconfig
PKGCONFIG += ogg dbus-1
#! [5]
#! [6]
LIBS += -L/usr/local/lib -lmath
#! [6]
#! [7]
INCLUDEPATH = c:/msdev/include d:/stl/include
#! [7]
#! [8]
qmake [mode] [options] files
#! [8]
#! [9]
qmake -makefile [options] files
#! [9]
#! [10]
qmake -makefile -o Makefile "CONFIG+=test" test.pro
#! [10]
#! [11]
qmake "CONFIG+=test" test.pro
#! [11]
#! [12]
qmake -project [options] files
#! [12]
#! [13]
qmake -spec macx-g++
#! [13]
#! [14]
QMAKE_LFLAGS += -F/path/to/framework/directory/
#! [14]
#! [15]
LIBS += -framework TheFramework
#! [15]
#! [16]
TEMPLATE = lib
CONFIG += lib_bundle
#! [16]
#! [17]
FRAMEWORK_HEADERS.version = Versions
FRAMEWORK_HEADERS.files = path/to/header_one.h path/to/header_two.h
FRAMEWORK_HEADERS.path = Headers
QMAKE_BUNDLE_DATA += FRAMEWORK_HEADERS
#! [17]
#! [19]
qmake -spec macx-xcode project.pro
#! [19]
#! [20]
qmake -tp vc
#! [20]
#! [21]
qmake -tp vc -r
#! [21]
#! [22]
CONFIG -= embed_manifest_exe
#! [22]
#! [23]
CONFIG -= embed_manifest_dll
#! [23]
#! [24]
make all
#! [24]
#! [25]
build_pass:CONFIG(debug, debug|release) {
unix: TARGET = $$join(TARGET,,,_debug)
else: TARGET = $$join(TARGET,,,d)
}
#! [25]
#! [26]
CONFIG += console newstuff
...
newstuff {
SOURCES += new.cpp
HEADERS += new.h
}
#! [26]
#! [27]
DEFINES += USE_MY_STUFF
#! [27]
#! [28]
myFiles.files = path\*.png
DEPLOYMENT += myFiles
#! [28]
#! [29]
myFiles.files = path\file1.ext1 path2\file2.ext1 path3\*
myFiles.path = \some\path\on\device
someother.files = C:\additional\files\*
someother.path = \myFiles\path2
DEPLOYMENT += myFiles someother
#! [29]
#! [30]
DESTDIR = ../../lib
#! [30]
#! [31]
DISTFILES += ../program.txt
#! [31]
#! [32]
FORMS = mydialog.ui \
mywidget.ui \
myconfig.ui
#! [32]
#! [34]
HEADERS = myclass.h \
login.h \
mainwindow.h
#! [34]
#! [35]
INCLUDEPATH = c:/msdev/include d:/stl/include
#! [35]
#! [36]
target.path += $$[QT_INSTALL_PLUGINS]/imageformats
INSTALLS += target
#! [36]
#! [37]
LEXSOURCES = lexer.l
#! [37]
#! [38]
unix:LIBS += -L/usr/local/lib -lmath
win32:LIBS += c:/mylibs/math.lib
#! [38]
#! [39]
CONFIG += no_lflags_merge
#! [39]
#! [40]
unix:MOC_DIR = ../myproject/tmp
win32:MOC_DIR = c:/myproject/tmp
#! [40]
#! [41]
unix:OBJECTS_DIR = ../myproject/tmp
win32:OBJECTS_DIR = c:/myproject/tmp
#! [41]
#! [43]
FRAMEWORK_HEADERS.version = Versions
FRAMEWORK_HEADERS.files = path/to/header_one.h path/to/header_two.h
FRAMEWORK_HEADERS.path = Headers
QMAKE_BUNDLE_DATA += FRAMEWORK_HEADERS
#! [43]
#! [44]
QMAKE_BUNDLE_EXTENSION = .myframework
#! [44]
#! [45]
QMAKE_RESOURCE_FLAGS += -threshold 0 -compress 9
#! [45]
#! [47]
QT -= gui # Only the core module is used.
#! [47]
#! [48]
unix:RCC_DIR = ../myproject/resources
win32:RCC_DIR = c:/myproject/resources
#! [48]
#! [49]
SOURCES = myclass.cpp \
login.cpp \
mainwindow.cpp
#! [49]
#! [50]
SUBDIRS = kernel \
tools \
myapp
#! [50]
#! [51]
CONFIG += ordered
#! [51]
#! [52]
TEMPLATE = app
TARGET = myapp
SOURCES = main.cpp
#! [52]
#! [53]
TEMPLATE = lib
SOURCES = main.cpp
TARGET = mylib
#! [53]
#! [54]
unix:UI_DIR = ../myproject/ui
win32:UI_DIR = c:/myproject/ui
#! [54]
#! [57]
win32:VERSION = 1.2.3.4 # major.minor.patch.build
else:VERSION = 1.2.3 # major.minor.patch
#! [57]
#! [58]
YACCSOURCES = moc.y
#! [58]
#! [59]
FILE = /etc/passwd
FILENAME = $$basename(FILE) #passwd
#! [59]
#! [60]
CONFIG = debug
CONFIG += release
CONFIG(release, debug|release):message(Release build!) #will print
CONFIG(debug, debug|release):message(Debug build!) #no print
#! [60]
#! [61]
contains( drivers, network ) {
# drivers contains 'network'
message( "Configuring for network build..." )
HEADERS += network.h
SOURCES += network.cpp
}
#! [61]
#! [62]
error(An error has occurred in the configuration process.)
#! [62]
#! [63]
exists( $(QTDIR)/lib/libqt-mt* ) {
message( "Configuring for multi-threaded Qt..." )
CONFIG += thread
}
#! [63]
#! [64]
MY_VAR = one two three four
MY_VAR2 = $$join(MY_VAR, " -L", -L) -Lfive
MY_VAR3 = $$member(MY_VAR, 2) $$find(MY_VAR, t.*)
#! [64]
#! [65]
LIST = 1 2 3
for(a, LIST):exists(file.$${a}):message(I see a file.$${a}!)
#! [65]
#! [66]
include( shared.pri )
OPTIONS = standard custom
!include( options.pri ) {
message( "No custom build options specified" )
OPTIONS -= custom
}
#! [66]
#! [67]
isEmpty( CONFIG ) {
CONFIG += warn_on debug
}
#! [67]
#! [68]
message( "This is a message" )
#! [68]
#! [69]
!build_pass:message( "This is a message" )
#! [69]
#! [70]
This is a test.
#! [70]
#! [71]
system(ls /bin):HAS_BIN=FALSE
#! [71]
#! [72]
UNAME = $$system(uname -s)
contains( UNAME, [lL]inux ):message( This looks like Linux ($$UNAME) to me )
#! [72]
#! [73]
ARGS = 1 2 3 2 5 1
ARGS = $$unique(ARGS) #1 2 3 5
#! [73]
#! [74]
qmake -set PROPERTY VALUE
#! [74]
#! [75]
qmake -query PROPERTY
qmake -query #queries all current PROPERTY/VALUE pairs
#! [75]
#! [77]
qmake -query "QT_INSTALL_PREFIX"
#! [77]
#! [78]
QMAKE_VERS = $$[QMAKE_VERSION]
#! [78]
#! [79]
documentation.path = /usr/local/program/doc
documentation.files = docs/*
#! [79]
#! [80]
INSTALLS += documentation
#! [80]
#! [81]
unix:documentation.extra = create_docs; mv master.doc toc.doc
#! [81]
#! [82]
target.path = /usr/local/myprogram
INSTALLS += target
#! [82]
#! [83]
CONFIG += create_prl
#! [83]
#! [84]
CONFIG += link_prl
#! [84]
#! [85]
QMAKE_EXT_MOC = .mymoc
#! [85]
#! [86]
mytarget.target = .buildfile
mytarget.commands = touch $$mytarget.target
mytarget.depends = mytarget2
mytarget2.commands = @echo Building $$mytarget.target
#! [86]
#! [87]
QMAKE_EXTRA_TARGETS += mytarget mytarget2
#! [87]
#! [88]
new_moc.output = moc_${QMAKE_FILE_BASE}.cpp
new_moc.commands = moc ${QMAKE_FILE_NAME} -o ${QMAKE_FILE_OUT}
new_moc.depend_command = g++ -E -M ${QMAKE_FILE_NAME} | sed "s,^.*: ,,"
new_moc.input = NEW_HEADERS
QMAKE_EXTRA_COMPILERS += new_moc
#! [88]
#! [89]
TARGET = myapp
#! [89]
#! [90]
DEFINES += USE_MY_STUFF
#! [90]
#! [91]
DEFINES -= USE_MY_STUFF
#! [91]
#! [92]
DEFINES *= USE_MY_STUFF
#! [92]
#! [93]
DEFINES ~= s/QT_[DT].+/QT
#! [93]
#! [94]
EVERYTHING = $$SOURCES $$HEADERS
message("The project contains the following files:")
message($$EVERYTHING)
#! [94]
#! [95]
win32:DEFINES += USE_MY_STUFF
#! [95]
#! [96]
win32:xml {
message(Building for Windows)
SOURCES += xmlhandler_win.cpp
} else:xml {
SOURCES += xmlhandler.cpp
} else {
message("Unknown configuration")
}
#! [96]
#! [97]
MY_VARIABLE = value
#! [97]
#! [98]
MY_DEFINES = $$DEFINES
#! [98]
#! [99]
MY_DEFINES = $${DEFINES}
#! [99]
#! [100]
TARGET = myproject_$${TEMPLATE}
#! [100]
#! [101]
target.path = $$[QT_INSTALL_PLUGINS]/designer
INSTALLS += target
#! [101]
#! [102]
defineReplace(functionName){
#function code
}
#! [102]
#! [103]
CONFIG += myfeatures
#! [103]
#! [105]
PRECOMPILED_HEADER = stable.h
#! [105]
#! [106]
precompile_header:!isEmpty(PRECOMPILED_HEADER) {
DEFINES += USING_PCH
}
#! [106]
#! [107]
PRECOMPILED_HEADER = window.h
SOURCES = window.cpp
#! [107]
#! [108]
SOURCES += hello.cpp
#! [108]
#! [109]
SOURCES += hello.cpp
SOURCES += main.cpp
#! [109]
#! [110]
SOURCES = hello.cpp \
main.cpp
#! [110]
#! [111]
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
#! [111]
#! [112]
TARGET = helloworld
#! [112]
#! [113]
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
#! [113]
#! [114]
qmake -o Makefile hello.pro
#! [114]
#! [115]
qmake -tp vc hello.pro
#! [115]
#! [116]
CONFIG += debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
#! [116]
#! [117]
win32 {
SOURCES += hellowin.cpp
}
#! [117]
#! [118]
CONFIG += debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
SOURCES += hellowin.cpp
}
unix {
SOURCES += hellounix.cpp
}
#! [118]
#! [119]
!exists( main.cpp ) {
error( "No main.cpp file found" )
}
#! [119]
#! [120]
CONFIG += debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
SOURCES += hellowin.cpp
}
unix {
SOURCES += hellounix.cpp
}
!exists( main.cpp ) {
error( "No main.cpp file found" )
}
#! [120]
#! [121]
win32 {
debug {
CONFIG += console
}
}
#! [121]
#! [122]
CONFIG += debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
SOURCES += hellowin.cpp
}
unix {
SOURCES += hellounix.cpp
}
!exists( main.cpp ) {
error( "No main.cpp file found" )
}
win32:debug {
CONFIG += console
}
#! [122]
#! [123]
TEMPLATE = app
DESTDIR = c:/helloapp
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
DEFINES += USE_MY_STUFF
CONFIG += release
#! [123]
#! [124]
make all
#! [124]
#! [125]
make
#! [125]
#! [126]
make install
#! [126]
#! [127]
CONFIG(debug, debug|release) {
mac: TARGET = $$join(TARGET,,,_debug)
win32: TARGET = $$join(TARGET,,d)
}
#! [127]
#! [142]
DEPLOYMENT_PLUGIN += qjpeg
#! [142]
#! [149]
SUBDIRS += my_executable my_library
my_executable.subdir = app
my_executable.depends = my_library
my_library.subdir = lib
#! [149]
#! [157]
packagesExist(sqlite3 QtNetwork QtDeclarative) {
DEFINES += USE_FANCY_UI
}
#! [157]
#! [158]
#ifdef USE_FANCY_UI
// Use the fancy UI, as we have extra packages available
#endif
#! [158]
#! [159]
message($$absolute_path("readme.txt", "/home/johndoe/myproject"))
#! [159]
#! [160]
TARGET = helloworld
equals(TARGET, "helloworld") {
message("The target assignment was successful.")
}
#! [160]
#! [161]
CONTACT = firstname middlename surname phone
message($$first(CONTACT))
#! [161]
#! [162]
CONTACT = firstname middlename surname phone
message($$last(CONTACT))
#! [162]
#! [163]
message($$format_number(BAD, ibase=16 width=6 zeropad))
#! [163]
#! [164]
ANSWER = 42
greaterThan(ANSWER, 1) {
message("The answer might be correct.")
}
#! [164]
#! [165]
ANSWER = 42
lessThan(ANSWER, 1) {
message("The answer might be wrong.")
}
#! [165]
#! [166]
if(linux-g++*|macx-g++*):CONFIG(debug, debug|release) {
message("We are on Linux or Mac OS, and we are in debug mode.")
}
#! [166]
#! [167]
CONTACT = firstname:middlename:surname:phone
message($$section(CONTACT, :, 2, 2))
#! [167]
#! [168]
CONTACT = firstname:middlename:surname:phone
message($$split(CONTACT, :))
#! [168]
#! [169]
NARF = zort
unset(NARF)
!defined(NARF, var) {
message("NARF is not defined.")
}
#! [169]
#! [170]
for(var, $$list(foo bar baz)) {
...
}
#! [170]
#! [171]
values = foo bar baz
for(var, values) {
...
}
#! [171]
#! [172]
VALUE = 123
TMP_VALUE = x$$VALUE
greaterThan(TMP_VALUE, x456): message("Condition may be true.")
#! [172]
#! [173]
message("First line$$escape_expand(\\n)Second line")
#! [173]
#! [174]
TEMPLATE = subdirs
SUBDIRS = one two three
prepareRecursiveTarget(check)
#! [174]
#! [175]
two.CONFIG += no_check_target
#! [175]
#! [176]
QMAKE_EXTRA_TARGETS += check
#! [176]
#! [177]
# <project root>/features/mycheck.prf
equals(TEMPLATE, subdirs) {
prepareRecursiveTarget(check)
} else {
check.commands = echo hello user
}
QMAKE_EXTRA_TARGETS += check
#! [177]
#! [178]
# <project root>/.qmake.conf
CONFIG += mycheck
#! [178]
#! [179]
# <project root>/project.pro
load(configure)
#! [179]
#! [180]
# <project root>/config.tests/test/test.pro
SOURCES = main.cpp
LIBS += -ltheFeature
# Note that the test project is built without Qt by default.
#! [180]
#! [181]
// <project root>/config.tests/test/main.cpp
#include <TheFeature/MainHeader.h>
int main() { return featureFunction(); }
#! [181]
#! [182]
# <project root>/project.pro
qtCompileTest(test)
#! [182]
#! [183]
# <project root>/project.pro
QMAKE_SONAME_PREFIX = @rpath
#! [183]
#! [184]
# <project root>/project.pro
QMAKE_SONAME_PREFIX = @executable_path/../Frameworks
QMAKE_SONAME_PREFIX = @loader_path/Frameworks
QMAKE_SONAME_PREFIX = /Library/Frameworks
#! [184]
#! [185]
VERSION_PE_HEADER = 1.2
#! [185]