與一個(gè)大四的學(xué)生同做一個(gè)項(xiàng)目,源文件有幾十個(gè),剛開(kāi)始還在為寫makefile發(fā)愁,幸好找到了automake工具鏈,覺(jué)得真是省了不少事。
后來(lái)他跟我說(shuō)他用的是qmake,比用automake更省了不少事。一比較,發(fā)現(xiàn)qmake確實(shí)是一個(gè)更好地選擇。
automake工具鏈比較復(fù)雜。一般要autoscan+修改configure.in+aclocal+寫Makefile.am+configure+make。很不容易上手,而且
容易出錯(cuò)。automake提供了更為精細(xì)的控制,復(fù)雜但強(qiáng)大。但其實(shí)一般我們也用不了那么多的功能,而且中間生成的那些配置文件也不在
少數(shù)。這時(shí)候還要將源碼與makefile部分分離開(kāi)來(lái)。一般的開(kāi)源軟件就采用這種方法,文件層次清楚,易于管理。但是一般的很少的文件
的話,我覺(jué)得用qmake就足夠了,易于上手,也不易出錯(cuò)。
qmake一般是qmake -project/qmake/make三步,中間需要適當(dāng)?shù)匦薷纳傻?.pro文件,然后就差不多了。qmake -project主要就是用
來(lái)生成*.pro文件。主要做的就是讀入當(dāng)前目錄的源文件。一些常用的配置變量如下:
Variable | Contents |
---|
CONFIG | General project configuration options. |
DESTDIR | The directory in which the executable or binary file will be placed. |
FORMS | A list of UI files to be processed by uic. |
HEADERS | A list of filenames of header (.h) files used when building the project. |
QT | Qt-specific configuration options. |
RESOURCES | A list of resource (.rc) files to be included in the final project. See the The Qt Resource System for more information about these files. |
SOURCES | A list of source code files to be used when building the project. |
TEMPLATE | The template to use for the project. This determines whether the output of the build process will be an application, a library, or a plugin. |
變量之間可以相互賦值比如。
TEMP_SOURCES = $$SOURCES
Template變量比較重要:用來(lái)決定所建工程的類型:
Template | Description of qmake output |
---|
app (default) | Creates a Makefile to build an application. |
lib | Creates a Makefile to build a library. |
subdirs | Creates a Makefile containing rules for the subdirectories specified using the SUBDIRSvariable. Each subdirectory must contain its own project file. |
vcapp | Creates a Visual Studio Project file to build an application. |
vclib | Creates a Visual Studio Project file to build a library. |
vcsubdirs | Creates a Visual Studio Solution file to build projects in sub-directories. |
一般用的都是app。
再說(shuō)上面的config變量,內(nèi)置的有:
Option | Description |
---|
release | The project is to be built in release mode. This is ignored if debug is also specified. |
debug | The project is to be built in debug mode. |
debug_and_release | The project is built in both debug and release modes. |
debug_and_release_target | The project is built in both debug and release modes. TARGET is built intoboth the debug and release directories. |
build_all | If debug_and_release is specified, the project is built in both debug and release modes by default. |
autogen_precompile_source | Automatically generates a .cpp file that includes the precompiled header file specified in the .pro file. |
ordered | When using the subdirs template, this option specifies that the directories listed should be processed in the order in which they are given. |
warn_on | The compiler should output as many warnings as possible. This is ignored ifwarn_off is specified. |
warn_off | The compiler should output as few warnings as possible. |
copy_dir_files | Enables the install rule to also copy directories, not just files. |
debug_and_release建立兩個(gè)版本。config還可以加上qt,thread,X11等用來(lái)指定建立相應(yīng)的工程類型。
如果是qt工程的話,QT變量就是一個(gè)需要關(guān)注的對(duì)象。當(dāng)用到相應(yīng)的庫(kù)時(shí),就要加上相應(yīng)的名字比如:
常用的就是core,gui.其他的用到時(shí)加上就行。
另外一個(gè)比較重要問(wèn)題就是QT與其他庫(kù)的融合,LIBS和INCLUDEPATH可以做到這一點(diǎn)。看名字就知道其作用。
和Gcc命令行參數(shù)的用法類似。
qmake也有一些內(nèi)置的函數(shù)用來(lái)提供更為強(qiáng)大的功能。常用到的有include,可以用來(lái)包含其他的工程文件,類似于C的頭文件。還有條件控制類的,如:
win32 { SOURCES += paintwidget_win.cpp }
win32就是一個(gè)條件。甚至還有循環(huán)控制語(yǔ)句:
EXTRAS = handlers tests docs for(dir, EXTRAS) { exists($$dir) { SUBDIRS += $$dir } }
這樣算下來(lái),其實(shí)qmake也挺復(fù)雜的,不過(guò)相對(duì)于automake來(lái)說(shuō),還是很容易的。