第2章 准备——2.14.Code::Blocks配置——全局路径变量

白话C++

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;选择:主菜单“设置→全局变量”,出现对话框“全局变量编辑器”,点击第一行的“新建”按钮,如下图:

新建全局变量集合(d2school)

图 25 新建全局变量集合

步骤2:完成第一步,将再次弹出一个对话框,输入“d2school”(不含引号),确认退出。

图 26 指定新集合名字:d2school

图 26 指定新集合名字:d2school

2.14.2. 全局变量wx

我们拥有了一个新的全局变量集合,我们接下为该集合创建第一个全局变量:wx。

步骤1:在“全局变量编辑”对话框中,点击第二行的“新建”按钮,将弹出一个标题为“新变量”的对话框,这次输入“wx”(不含引号),确认退出。

图 27 新建全局变量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填写内容

图 28 wx变量的base,include,lib填写内容

步骤3:为了确保填写无误,请分别点击上图中的三个“...”按钮,进行检查。

2.14.3. 其它全局变量

  • boost
名称boost
baseE:/cpp_ex_libs/boost/boost_1_36_0
includeE:/cpp_ex_libs/boost/boost_1_36_0/include/boost-1_36
libE:/cpp_ex_libs/boost/boost_1_36_0/lib
  • iconv
名称iconv
baseE:/cpp_ex_libs/iconv
includeE:/cpp_ex_libs/iconv/include
libE:/cpp_ex_libs/iconv/lib
  • iconvpp
名称iconvpp
baseE:/cpp_ex_libs/iconvpp
includeE:/cpp_ex_libs/iconvpp/include
libE:/cpp_ex_libs/iconvpp/lib
  • mysql
名称mysql
baseE:/cpp_ex_libs/MySQL
includeE:/cpp_ex_libs/MySQL/include
libE:/cpp_ex_libs/MySQL/lib
  • mysqlpp
名称mysqlpp
baseE:/cpp_ex_libs/MySQL++/3.0.6
includeE:/cpp_ex_libs/MySQL++/3.0.6/include
libE:/cpp_ex_libs/MySQL++/3.0.6/lib
  • xerces
名称xerces
baseE:/cpp_ex_libs/xerces-c/xerces-c-src_2_8_0
includeE:/cpp_ex_libs/xerces-c/xerces-c-src_2_8_0/include
libE:/cpp_ex_libs/xerces-c/xerces-c-src_2_8_0/lib
  • deelx
名称deelx
baseE:/cpp_ex_libs/deelx
includeE:/cpp_ex_libs/deelx/include
lib(空)
  • sdl
名称sdl
baseE:/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复制到该目录下)

白话C++
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南郁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值