2.14. Code::Blocks配置——全局路径变量
本章我们安装了许多扩展库,接下来,我们将要在程序中写一些调用这些库的代码,然后由编译器编译代码、最后由链接器将库与程序以某种形式“链接”在一起。编译器和链接器,都需要“知道”上哪儿找这些库。
"库"其实就是一些文件,它们被存放在某个文件夹里。以SDL为例,我们只要提供这样一个绝对路径:“E:/cpp_ex_libs/SDL/SDL-1.2.13/lib/SDL.dll”,那么链接器肯定不会向我们抱怨“找不到XXXX库”。
采用“绝对路径”来指定某个扩展库的位置,存在一些问题:
- 团队开发时,难以合作。原因是不同的开发者可能将同一个库安装在不同的目录下。比如我把cpp_ex_libs安装在E盘,我写了一个例子项目放在网上供大家下载,但下载完以后,用Code::Blocks打开,由于项目配置内容中,全是“E:/cpp_ex_libs/……”,如果您的 “cpp_ex_libs”位于F盘,那您就不得不一个个查找替换过去了!唉,这样事,我们之前就遇过。
- 就算个人开发,采用绝对路径也不太方便。以wxWidgets为例,一开始我用2.8.7的版本开发一个软件,后来wxWidgets官方升级了,我想试试新版,又不也直接删除掉旧版,所以就把新版安装在另一个目录下,这时要实现项目升级,如果当初写的“绝对路径” ,现在恐怕不得不去一一修改那些路径信息了。
Code::Blocks 采用“全局变量”的概念来解决这一问题,即,用“${#wx}”这样一个特定的字符串,来表示wxWidgets的安装路径。在我的机器上,我它配置为代表“E:/cpp_ex_libs/wxWidgets/wxWidgets-2.8.9”这样一个位置,在您的机器,则可以配置成“F: /cppexlib/wx/wxWidgets-2.8.9”。我们之间的约定,就是同样以“wx”作为名字,用于代表wxWidgets扩展库在各自机器上实际安装位置。
类似同一个扩展库不同版本的问题如何解决呢?Code::Blocks 提供了“全局变量集合”,允许提供多套全局变量。比如笔者在写本书的例子程序,所有扩展库都采用当前最新版本,但在为公司开发时,用的是相对旧版的扩展库,这种情况下,我就可以定义两套变量集,上班时和在家时在两个集合间切换即可(假设我上班和在家用的是同一台本本电脑)。
2.14.1. 新建全局变量集:d2school
为了教学上彼此方便,我们将在Code::Blocks中创建一个名为d2school的变量集,请按如下步骤操作。
步骤1:运行Code::Blocks;选择:主菜单“设置→全局变量”,出现对话框“全局变量编辑器”,点击第一行的“新建”按钮,如下图:
图 25 新建全局变量集合
步骤2:完成第一步,将再次弹出一个对话框,输入“d2school”(不含引号),确认退出。
图 26 指定新集合名字:d2school
2.14.2. 全局变量wx
我们拥有了一个新的全局变量集合,我们接下为该集合创建第一个全局变量:wx。
步骤1:在“全局变量编辑”对话框中,点击第二行的“新建”按钮,将弹出一个标题为“新变量”的对话框,这次输入“wx”(不含引号),确认退出。
图 27 新建全局变量wx
步骤2:然后,请在“全局变量编辑”对话框左侧的“base”栏内,填写wxWidgets扩展库在您机器上的安装路径,对于本书是:
“E:/cpp_ex_libs/wxWidgets/wxWidgets-2.8.9”(不含引号,下同)
您可以通过编辑框右边的“...”按钮找到实际安装路径。
在“include”栏内,填写:
“E:/cpp_ex_libs/wxWidgets/wxWidgets-2.8.9/include”
在“lib”栏内,填写:
“E:/cpp_ex_libs/wxWidgets/wxWidgets-2.8.9/lib”
效果如图:
图 28 wx变量的base,include,lib填写内容
步骤3:为了确保填写无误,请分别点击上图中的三个“...”按钮,进行检查。
2.14.3. 其它全局变量
- boost
名称 | boost |
---|---|
base | E:/cpp_ex_libs/boost/boost_1_36_0 |
include | E:/cpp_ex_libs/boost/boost_1_36_0/include/boost-1_36 |
lib | E:/cpp_ex_libs/boost/boost_1_36_0/lib |
- iconv
名称 | iconv |
---|---|
base | E:/cpp_ex_libs/iconv |
include | E:/cpp_ex_libs/iconv/include |
lib | E:/cpp_ex_libs/iconv/lib |
- iconvpp
名称 | iconvpp |
---|---|
base | E:/cpp_ex_libs/iconvpp |
include | E:/cpp_ex_libs/iconvpp/include |
lib | E:/cpp_ex_libs/iconvpp/lib |
- mysql
名称 | mysql |
---|---|
base | E:/cpp_ex_libs/MySQL |
include | E:/cpp_ex_libs/MySQL/include |
lib | E:/cpp_ex_libs/MySQL/lib |
- mysqlpp
名称 | mysqlpp |
---|---|
base | E:/cpp_ex_libs/MySQL++/3.0.6 |
include | E:/cpp_ex_libs/MySQL++/3.0.6/include |
lib | E:/cpp_ex_libs/MySQL++/3.0.6/lib |
- xerces
名称 | xerces |
---|---|
base | E:/cpp_ex_libs/xerces-c/xerces-c-src_2_8_0 |
include | E:/cpp_ex_libs/xerces-c/xerces-c-src_2_8_0/include |
lib | E:/cpp_ex_libs/xerces-c/xerces-c-src_2_8_0/lib |
- deelx
名称 | deelx |
---|---|
base | E:/cpp_ex_libs/deelx |
include | E:/cpp_ex_libs/deelx/include |
lib | (空) |
- sdl
名称 | sdl |
---|---|
base | E:/cpp_ex_libs/SDL/SDL-1.2.13 |
include | E:/cpp_ex_libs/SDL/SDL-1.2.13/include/SDL (注意,和其它include略有不同,此处以SDL子目录结束,而不是在include目录结束) |
lib | E:/cpp_ex_libs/SDL/SDL-1.2.13/lib (之前,我们曾经将SDL.dll复制到该目录下) |