日常工作实践中,可以通过变量和编译器配合使用,控制编译器的行为。这些参数必须在gcc命令行中显示指定,使用export命令指定这些变量是无效的。
CLFAGS和CXXFLAGS
CLFAGS表示C编译器的选项,CXXFLAGS 表示C++编译器的选项,用于指定头文件(.h)的路径。
例子:
CFLAGS=-I/usr/include -I/path/include
大多数程序和库在编译时默认的优化级别是"2"(使用"-O2"选项)并且带有调试符号来编译.
CFLAGS="-O2 -g"
CXXFLAGS="-O2 -g"
LDFLAGS和LIBS
LDFLAGS是传递给连接器的参数,在里面指定库文件的位置。LIBS是告诉链接器要链接哪些库文件。在文件链接的时候需要使用库文件,有时会出现.so文件找不到的情况,可以使用环境变量LDFLAGS指定相关库文件的路径位置。
例子:
export LDFLAGS='-L/var/xxx/lib -Wl,R/var/xxx/lib'
LIBS = -lpthread -liconv
注意
更新升级软件后,新版本的库文件会替换掉旧版本的库文件,而自己创建的链接文件会保留下来,并指向旧版本的库文件,需要手动修改。