如何让qmake生成的Makefie不链接Qt库

在CSDN上搜索了一下,大部分关于qmake的实例都是链接到Qt库,包括QtCore和QtGui。如果只是想写一个普通的C++命令行程序,链接Qt库显然是使得最终生成的程序尺寸变得臃肿,而且必须要安装庞大的Qt包。

 

那么如何让qmake不链接到Qt库呢?

默认情况下,qmake是要链接QtCore和QtGui两个库的。即使你什么也不做,因为这是默认行为。

通过以下配置可以解除这种配置。

#不需要QT CONFIG -= qt

 

简单吧,这下清净了,我们明确告知qmake这不是qt程序,只需要qmake为我们生成普通Makefile,其他什么也不要多做。

以下是我为boost asio中一个简单tcp服务器程序写的qmake工程文件:TcpServer.pro。

#qmake 命令行 #qmake -makefile -spec linux-g++ TcpServer.pro TARGET = TcpServer.bin TEMPLATE = app #不需要QT CONFIG -= qt #编译debug模式 CONFIG += debug #指定中间文件目录 OBJECTS_DIR = ./debug #BOOST头文件路径 INCLUDEPATH += $$(BOOST_INCLUDE) INCLUDEPATH += $$(BOOST_INCLUDE) #依赖的boost库 #技巧:通过 $$(ENV_VAR) 访问环境变量 #LIBS += -L$$(BOOST_LIB) -lboost_system -lboost_thread -lboost_date_time -pthread LIBS += -L$$(BOOST_LIB) -lboost_system -lboost_thread -lboost_date_time -lpthread #头文件 HEADERS += connection.hpp HEADERS += io_service_pool.hpp HEADERS += server.hpp #源文件 SOURCES += connection.cpp SOURCES += io_service_pool.cpp SOURCES += server.cpp SOURCES += main.cpp

正如注释中提到的,运行 qmake -makefile -spec linux-g++ TcpServer.pro 生成可用linux g++编译器进行编译的Makefile。

 

如果我们将 “CONFIG –= qt” 这一行注释掉,及使用qmake的默认配置,那么来比较一下两者的差别。

如何让qmake生成的Makefie不链接Qt库_第1张图片

下面一栏是qmake默认配置下生成的Makefile。可以清晰的看出,默认生成的Makefile增加了Qt宏定义、头文件路径、QtGui和QtCore链接库。而上面一栏是 增加了 ”CONFIG –= qt “配置的生成的Makefile,显然清爽了很多。只有我们指定的库文件。

顺带提一下,qmake中访问环境变量的方法是 $$(env_var),env_var是变量名。 注意是两个美元符加小括号包围哦 ^_^

 

qmake生成的makefile尺寸还是很精简的,可以清晰看懂。我把上面完整的Makefile贴出来。

############################################################################# # Makefile for building: TcpServer.bin # Generated by qmake (2.01a) (Qt 4.6.2) on: ?? 8? 9 23:32:28 2010 # Project: TcpServer.pro # Template: app # Command: /usr/bin/qmake -spec /usr/share/qt4/mkspecs/linux-g++ -unix -o Makefile TcpServer.pro ############################################################################# ####### Compiler, tools and options CC = gcc CXX = g++ DEFINES = CFLAGS = -pipe -g -Wall -W $(DEFINES) CXXFLAGS = -pipe -g -Wall -W $(DEFINES) INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I. -I../../../boost_1_43_0 -I../../../boost_1_43_0 LINK = g++ LFLAGS = LIBS = $(SUBLIBS) -L/home/mpforwd/boost_1_43_0/stage/lib -lboost_system -lboost_thread -lboost_date_time -lpthread AR = ar cqs RANLIB = QMAKE = /usr/bin/qmake TAR = tar -cf COMPRESS = gzip -9f COPY = cp -f SED = sed COPY_FILE = $(COPY) COPY_DIR = $(COPY) -r STRIP = strip INSTALL_FILE = install -m 644 -p INSTALL_DIR = $(COPY_DIR) INSTALL_PROGRAM = install -m 755 -p DEL_FILE = rm -f SYMLINK = ln -f -s DEL_DIR = rmdir MOVE = mv -f CHK_DIR_EXISTS= test -d MKDIR = mkdir -p ####### Output directory OBJECTS_DIR = debug/ ####### Files SOURCES = connection.cpp / io_service_pool.cpp / server.cpp / main.cpp OBJECTS = debug/connection.o / debug/io_service_pool.o / debug/server.o / debug/main.o DIST = /usr/share/qt4/mkspecs/common/g++.conf / /usr/share/qt4/mkspecs/common/unix.conf / /usr/share/qt4/mkspecs/common/linux.conf / /usr/share/qt4/mkspecs/qconfig.pri / /usr/share/qt4/mkspecs/features/qt_functions.prf / /usr/share/qt4/mkspecs/features/qt_config.prf / /usr/share/qt4/mkspecs/features/exclusive_builds.prf / /usr/share/qt4/mkspecs/features/default_pre.prf / /usr/share/qt4/mkspecs/features/debug.prf / /usr/share/qt4/mkspecs/features/default_post.prf / /usr/share/qt4/mkspecs/features/warn_on.prf / /usr/share/qt4/mkspecs/features/resources.prf / /usr/share/qt4/mkspecs/features/uic.prf / /usr/share/qt4/mkspecs/features/yacc.prf / /usr/share/qt4/mkspecs/features/lex.prf / /usr/share/qt4/mkspecs/features/include_source_dir.prf / TcpServer.pro QMAKE_TARGET = TcpServer.bin DESTDIR = TARGET = TcpServer.bin first: all ####### Implicit rules .SUFFIXES: .o .c .cpp .cc .cxx .C .cpp.o: $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .cc.o: $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .cxx.o: $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .C.o: $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .c.o: $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<" ####### Build rules all: Makefile $(TARGET) $(TARGET): $(OBJECTS) $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) Makefile: TcpServer.pro /usr/share/qt4/mkspecs/linux-g++/qmake.conf /usr/share/qt4/mkspecs/common/g++.conf / /usr/share/qt4/mkspecs/common/unix.conf / /usr/share/qt4/mkspecs/common/linux.conf / /usr/share/qt4/mkspecs/qconfig.pri / /usr/share/qt4/mkspecs/features/qt_functions.prf / /usr/share/qt4/mkspecs/features/qt_config.prf / /usr/share/qt4/mkspecs/features/exclusive_builds.prf / /usr/share/qt4/mkspecs/features/default_pre.prf / /usr/share/qt4/mkspecs/features/debug.prf / /usr/share/qt4/mkspecs/features/default_post.prf / /usr/share/qt4/mkspecs/features/warn_on.prf / /usr/share/qt4/mkspecs/features/resources.prf / /usr/share/qt4/mkspecs/features/uic.prf / /usr/share/qt4/mkspecs/features/yacc.prf / /usr/share/qt4/mkspecs/features/lex.prf / /usr/share/qt4/mkspecs/features/include_source_dir.prf $(QMAKE) -spec /usr/share/qt4/mkspecs/linux-g++ -unix -o Makefile TcpServer.pro /usr/share/qt4/mkspecs/common/g++.conf: /usr/share/qt4/mkspecs/common/unix.conf: /usr/share/qt4/mkspecs/common/linux.conf: /usr/share/qt4/mkspecs/qconfig.pri: /usr/share/qt4/mkspecs/features/qt_functions.prf: /usr/share/qt4/mkspecs/features/qt_config.prf: /usr/share/qt4/mkspecs/features/exclusive_builds.prf: /usr/share/qt4/mkspecs/features/default_pre.prf: /usr/share/qt4/mkspecs/features/debug.prf: /usr/share/qt4/mkspecs/features/default_post.prf: /usr/share/qt4/mkspecs/features/warn_on.prf: /usr/share/qt4/mkspecs/features/resources.prf: /usr/share/qt4/mkspecs/features/uic.prf: /usr/share/qt4/mkspecs/features/yacc.prf: /usr/share/qt4/mkspecs/features/lex.prf: /usr/share/qt4/mkspecs/features/include_source_dir.prf: qmake: FORCE @$(QMAKE) -spec /usr/share/qt4/mkspecs/linux-g++ -unix -o Makefile TcpServer.pro dist: @$(CHK_DIR_EXISTS) debug/TcpServer.bin1.0.0 || $(MKDIR) debug/TcpServer.bin1.0.0 $(COPY_FILE) --parents $(SOURCES) $(DIST) debug/TcpServer.bin1.0.0/ && (cd `dirname debug/TcpServer.bin1.0.0` && $(TAR) TcpServer.bin1.0.0.tar TcpServer.bin1.0.0 && $(COMPRESS) TcpServer.bin1.0.0.tar) && $(MOVE) `dirname debug/TcpServer.bin1.0.0`/TcpServer.bin1.0.0.tar.gz . && $(DEL_FILE) -r debug/TcpServer.bin1.0.0 clean:compiler_clean -$(DEL_FILE) $(OBJECTS) -$(DEL_FILE) *~ core *.core ####### Sub-libraries distclean: clean -$(DEL_FILE) $(TARGET) -$(DEL_FILE) Makefile compiler_rcc_make_all: compiler_rcc_clean: compiler_uic_make_all: compiler_uic_clean: compiler_image_collection_make_all: qmake_image_collection.cpp compiler_image_collection_clean: -$(DEL_FILE) qmake_image_collection.cpp compiler_yacc_decl_make_all: compiler_yacc_decl_clean: compiler_yacc_impl_make_all: compiler_yacc_impl_clean: compiler_lex_make_all: compiler_lex_clean: compiler_clean: ####### Compile debug/connection.o: connection.cpp connection.hpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug/connection.o connection.cpp debug/io_service_pool.o: io_service_pool.cpp server.hpp / connection.hpp / io_service_pool.hpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug/io_service_pool.o io_service_pool.cpp debug/server.o: server.cpp server.hpp / connection.hpp / io_service_pool.hpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug/server.o server.cpp debug/main.o: main.cpp server.hpp / connection.hpp / io_service_pool.hpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug/main.o main.cpp ####### Install install: FORCE uninstall: FORCE FORCE:

以上Makefile作者在 ubuntu 10.04上配合boost_1_43_0 编译通过。

 

qmake也可以为C++生成windows下的 VC工程 .vcproj。这里不提,qmake文档有详细的说明,利用qmake我们可以为跨平台C++程序管理编译工程。

 

如何获取qmake

作者在ubuntu上直接执行以下软件包安装命令。

apt-get install qt4-qmake

 

你可能感兴趣的:(如何让qmake生成的Makefie不链接Qt库)