Qt工程pro文件的简单配置(尤其是第三方头文件和库)

Qt开发中,pro文件是对正工程所有源码、编译、资源、目录等的全方位配置的唯一方式,pro文件的编写非常重要,以下对几个重要项进行说明(win和linux,mac平台通用配置)

注释

以”#”开始的行,直到结束

模板变量

告诉qmake生成哪种makefile

TEMPLATE = app
  • 1

其中

  • app -表示该工程建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用
  • lib - 表示该工程建立一个库的makefile

生成目录

指定生成的可执行程序的目录,可以绝对和相对路径

DESTDIR += ../bin
  • 1

生成的应用程序名

软件名

TARGET = qtest
  • 1

编译选项

增添或者移除某个模块 
比如增添C++11和console支持,Qt的各模块也在这里面添加

CONFIG += console c++11 network
CONFIG -= qt
  • 1
  • 2

可以用空格分隔或者”\”来隔行

目标文件目录

obj文件存放的目录,可以绝对或相对路径

OBJECTS_DIR += ../tmp
  • 1

工程中包含的头文件

表示本工程中的头文件

HEADERS += \
    libcurl/curl/curl.h \
    libcurl/curl/curlbuild.h \
    libcurl/curl/curlrules.h \
  • 1
  • 2
  • 3
  • 4

只要qtcreator目录树里add进去了就自动添加

工程中包含的源文件

表示本工程中的源文件

SOURCES += mytest.cpp\
           main.cpp
  • 1
  • 2

只要qtcreator目录树里add进去了就自动添加

工程中包含的资源文件

表示本工程包含的资源文件

RESOURCES += qrc/painter.qrc
  • 1

只要qtcreator目录树里add进去了就自动添加,更改pro文件会同步更新qtcreator里的目录树,但不会影响硬盘上的资源文件

附加头文件包含目录

一般要编译链接第三方库时配置include目录 
例如

INCLUDEPATH += ./boost/include\
               src/thirdpart/include
  • 1
  • 2
INCLUDEPATH += D:/boost/include\
               E:/cocos2dx/include
  • 1
  • 2
  • 可以用绝对或相对路径
  • 相对路径中./可以省略
  • 路径中不允许出现空格

链接库

对于静态库(.lib, .a)以及动态库.so

LIBS += -LD:/codetest/libcurlcpp/libcurl/lib/-llibcurl\
        -LD:/codetest/libcurlcpp/libcurl/lib/-lws2_32\
        -LD:/codetest/libcurlcpp/libcurl/lib/-lwldap32\
        -LD:/codetest/libcurlcpp/libcurl/lib/-lopencv.so\
        -LD:/codetest/libcurlcpp/libcurl/lib/-llibzmq.a
  • 1
  • 2
  • 3
  • 4
  • 5

或者

LIBS += D:/codetest/libcurlcpp/libcurl/lib/libcurl.lib\
        D:/codetest/libcurlcpp/libcurl/lib/ws2_32.lib\
        D:/codetest/libcurlcpp/libcurl/lib/wldap32.lib
        D:/codetest/libcurlcpp/libcurl/lib/opencv.so\
        D:/codetest/libcurlcpp/libcurl/lib/opencv.a
  • 1
  • 2
  • 3
  • 4
  • 5

或者

LIBS += $$PWD/libcurl/lib/libcurl.lib\
        $$PWD/libcurl/lib/ws2_32.lib\
        $$PWD/libcurl/lib/wldap32.lib
  • 1
  • 2
  • 3
  • 4
  • 可以用-L指定目录,-l指定库的名称(无需后缀,.lib,.a, .so都适用)注意-l后面没有空格
  • 可以直接通过绝对路径和相对路径指定库的完整path(需后缀,.lib,.a, .so都适用),相对路径用$$pwd前缀,路径不允许空格
  • LIBS += somepath 这个可以多行写,也可以用“\”隔行

对于动态库dll,必须拷贝到exe执行目录或者在环境变量里配置路径

预编译宏

DEFINES += USE_OPENSSL\
           CURL_STATICLIB
  • 1
  • 2

类似于vs里面在工程里设置预编译选项

平台相关性处理

根据qmake所运行的平台来使用相应的作用域来进行处理

win32
{
    SOURCES += 1.cpp
}
else
{
    SOURCES += 2.cpp
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

根据平台进行条件编译

时间: 2024-08-30 23:09:53

Qt工程pro文件的简单配置(尤其是第三方头文件和库)的相关文章

youcompleteme-VIM插件YouCompleteMe如何配置才能对自定义头文件中的函数和类型进行补全

问题描述 VIM插件YouCompleteMe如何配置才能对自定义头文件中的函数和类型进行补全 我最近在折腾YouCompleteMe,对基本的C/C++关键字都能进行补全,但不能对自己项目中的头文件中的标识符进行补全,已经在 .ycm_extra_conf.py中通过'-I','自己项目头文件的路径'的方式把自己的头文件路径加入了flags中,但还是不能对自己编写的头文件中的函数和类型进行补全,应该怎么配置??? 解决方案 我看了你的答案,没什么有用的内容 解决方案二: 可以看看这篇博文: h

Qt之pro配置详解

简述 使用Qt的时候,我们经常会对pro进行一系列繁琐的配置,为方便大家理解.查找,现将常用的配置进行整理. 简述 配置 注释 CONFIG DEFINES DEPENDPATH DESTDIR FORMS HEADERS INCLUDEPATH LIBS MOC_DIR OBJECTS_DIR QT RCC_DIR RESOURCES RC_FILE RC_ICONS SOURCES TARGET TEMPLATE TRANSLATIONS UI_DIR 更多参考 配置 注释 以"#"

程序设计方式 之 嵌套头文件包含方式

       一直以来写程序有个习惯,喜欢把常用的STL类,或者其他常用的类,变量,宏等定义到一个文件内,然后在使用其中一个类的地方包含这个文件.一直再使用,也一直存在困惑,这种设计方式的能否放心大胆的使用,对它始终心存畏惧,所有这些促使我完成这篇文章,并且经过种种测试,有足够的信心继续使用这种设计方式.        操作如下 定义base.h文件,包含基本的STL类,并且通过typedef建立不同的映射关系,以便减少不同的文件出现过多vector<string>之类的声明方式.当需要使用v

c语言-小白求教C语言头文件和源文件的关系

问题描述 小白求教C语言头文件和源文件的关系 书上说头文件一般只有声明,比如void func(void); 函数的定义则是在源文件中,那也就是说我新建的项目要使用以前项目中写过的一些函数(有相关头文件含有它们的声明),光靠把相关头文件#include进来是没用的喽? 可是为什么像stdio.h这样的可以不用包含它的源文件呢? 解决方案 stdio.h的实现在stdlib里,封装起来了,不能通过文本格式打开,防止被修改! 很多函数只提供给你头文件(相当于接口,只给用户使用),而没有具体实现的源代

C++预编译头文件

许多初学 VC 的朋友也许都为那么一个问题困扰过:     为什么所有的 cpp 都必须 #include "stdafx.h"     也许请教了别的高手之后,他们会告诉你,这是预编译头,必须包含.可是,这到底是为什么呢?预编译头有什么用呢?     这得从头文件的编译原理讲起.其实头文件并不神秘,它的全部作用,就是把自己的所有内容直接"粘贴"到相应的 #include 语句处.如果不相信的话,不妨做个实验,将一个 cpp 中的所有 #include 语句删掉,并

解析VC中预编译头文件的深入分析_C 语言

一.为什么预编译头文件:预编译头的概念: 所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常是以.pch为扩展名的),这个文件就称为预编译头文件这些预先编译好的代码可以是任何的C/C++代码,甚至是inline的函数,但是必须是稳定的,在工程开发的过程中不会被经常改变.如果这些代码被修改,则需要重新编译生成预编译头文件.注意生成预编译头文件是很耗时间的.同时你得注意预编译头文件通常很大,通常有6-7M大.注意及时清理那些没有用的预编译头文件.也许你会问:现在的编译器都有

(一〇九)单独编译(多个源代码文件和头文件)

单独编译的简单原理: C++在内存中储存数据提供了多种选择.   可以选择数据保留在内存中的时间长度(存储持续性)以及程序的哪一部分可以访问数据(作用域和链接)等.可以使用new来动态地分配内存,而定位new运算符提供了这种技术的一种变种.C++名称空间是另一种控制访问权的方式.   通常,大型程序都由多个源代码文件组成,这些文件可能共享一些数据.这样的程序涉及到文件的单独编译.     ----***一〇九谈的是单独编译***一一〇谈的是存储***------   和C语言一样,C++也允许,

vc-数据结构(c语言)自定义头文件打不开

问题描述 数据结构(c语言)自定义头文件打不开 在vc6.0里面自定义了头文件 #include ""SqList.h"" 然后显示错误D:vc6Microsoft Visual StudioMyProjectscplusshiyabn.cpp(4) : fatal error C1083: Cannot open include file: 'SqList.h': No such file or directory 怎么破? 解决方案 路径不对,用<>

头文件编写-头文件自包含是什么意思?

问题描述 头文件自包含是什么意思? 头文件自包含是什么意思?能给个例子吗?作用是什么呢?谢谢!............. 解决方案 说明:简单的说,自包含就是任意一个头文件均可独立编译.如果一个文件包含某个头文件,还要包含另外一个头文件才能工作的话,就会增加交流障碍,给这个头文件的用户增添不必要的负担. 示例: 如果a.h不是自包含的,需要包含b.h才能编译,会带来的危害: 每个使用a.h头文件的.c文件,为了让引入的a.h的内容编译通过,都要包含额外的头文件b.h. 额外的头文件b.h必须在a