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

第2章 准备——2.14.Code::Blocks配置——全局路径变量_第1张图片

图 25 新建全局变量集合

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

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

图 26 指定新集合名字:d2school

2.14.2. 全局变量wx

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

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

第2章 准备——2.14.Code::Blocks配置——全局路径变量_第3张图片

图 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”

效果如图:

第2章 准备——2.14.Code::Blocks配置——全局路径变量_第4张图片

图 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复制到该目录下)

白话C++
[回到目录]

你可能感兴趣的:(白话C++,include,扩展,编译器,c)