`

makefile中的CFLAGS与LDFLAGS

阅读更多
在configure时我们经常会遇到明明已经指令了目录但有时就是链接不了的情况,解决方法及原因如下(引用自http://www.cnblogs.com/taskiller/archive/2012/12/14/2817650.html)


CFLAGS: 指定头文件(.h文件)的路径,如:CFLAGS=-I/usr/include -I/path/include。同样地,安装一个包时会在安装路径下建立一个include目录,当安装过程中出现问题时,试着把以前安装的包的include目录加入到该变量中来。

LDFLAGS:gcc 等编译器会用到的一些优化参数,也可以在里面指定库文件的位置。用法:LDFLAGS=-L/usr/lib -L/path/to/your/lib。每安装一个包都几乎一定的会在安装目录里建立一个lib目录。如果明明安装了某个包,而安装另一个包时,它愣是说找不到,可以抒那个包的lib路径加入的LDFALGS中试一下。

LIBS:告诉链接器要链接哪些库文件,如LIBS = -lpthread -liconv

简单地说,LDFLAGS是告诉链接器从哪里寻找库文件,而LIBS是告诉链接器要链接哪些库文件。不过使用时链接阶段这两个参数都会加上,所以你即使将这两个的值互换,也没有问题。

有时候LDFLAGS指定-L虽然能让链接器找到库进行链接,但是运行时链接器却找不到这个库,如果要让软件运行时库文件的路径也得到扩展,那么我们需要增加这两个库给"-Wl,R":

LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib

如果在执行./configure以前设置环境变量export LDFLAGS="-L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib" ,注意设置环境变量等号两边不可以有空格,而且要加上引号(shell的用法)。那么执行configure以后,Makefile将会设置这个选项,链接时会有这个参数,编译出来的可执行程序的库文件搜索路径就得到扩展了。
分享到:
评论

相关推荐

    韦东山通用Makefile文件

    2. 顶层Makefile中的CFLAGS在编译任意一个.c文件时都会使用 3. CFLAGS EXTRA_CFLAGS CFLAGS_xxx.o 三者组成xxx.c的编译选项 二、顶层目录的Makefile: 它除了定义obj-y来指定根目录下要编进程序去的文件、子...

    CC++ 通用 Makefile

    1. Makefile 的组织结构:Makefile 应该与源程序文件放在同一个目录中,以方便使用。用户可以将源程序分类存放在不同的目录中,但需要在 Makefile 中指定源程序的路径。 2. Makefile 的使用方法:用户需要将 ...

    uClinux中的makefile

    2. **规则和变量**:在uClinux makefile中,常见的变量包括CC(C编译器)、CFLAGS(C编译选项)、LDFLAGS(链接选项)等。这些变量可以被设置来定制编译过程,例如添加优化级别、定义宏或者指定头文件目录。 3. **...

    Makefile的简介

    现在,`CC`、`CFLAGS`和`LDFLAGS`可以方便地在整个Makefile中引用,而`$^`代表所有依赖文件。 除了基本的Makefile语法,还有更高级的概念,如隐含规则、模式规则、多目标规则、条件语句、函数等。通过熟练掌握这些...

    MakeFile解释.docx

    5. **注释**:与大多数编程语言类似,Makefile使用`#`字符作为注释标记。如果需要在Makefile中使用`#`字符本身,则可以使用反斜杠`\`进行转义。 #### 三、Makefile文件命名约定 Makefile文件通常命名为`Makefile`...

    Makefile中的一些隐含规则.pdf

    在Makefile中,隐含规则会涉及一些系统变量,如`CFLAGS`,用于控制编译器参数,而`LDFLAGS`则用于控制链接器参数。例如,当我们有一个目标`foo`,它依赖于`foo.o`和`bar.o`,而Makefile中没有明确指定如何生成`.o`...

    stm32自写makefile工程

    在这个项目中,我们关注的是如何为STM32微控制器编写自定义的Makefile,以及它涉及到的嵌套写法。 首先,我们需要理解STM32。STM32是意法半导体(STMicroelectronics)推出的一系列基于ARM Cortex-M内核的微控制器...

    Makefile教程

    #### 九、Makefile中的条件判断与函数 - **条件判断**: Makefile支持使用条件语句来实现逻辑分支,如`ifeq`、`ifdef`等。 - **函数**: 函数可以用于处理字符串、文件名等,以生成动态值。例如,`$(filter)`函数用于...

    如何写Makefile

    #### 一、Makefile的重要性与概念 Makefile 是一种脚本文件,用于描述软件项目的构建过程。它包含了编译规则、链接规则以及其他与项目构建相关的指令。通过Makefile,开发人员可以高效地管理复杂的工程项目,确保...

    Makefile手册.zip

    在Makefile中,预定义了一些变量,如`CC`代表C编译器,`CFLAGS`用于设置编译选项,`LDFLAGS`用于链接阶段的选项,`OBJS`通常用于存储编译后目标文件的列表。你可以根据需要自定义这些变量,或者定义新的变量来组织你...

    简单通用Makefile使用示例工程

    在软件开发过程中,Makefile是自动化构建工具,用于编译、链接和其他构建步骤。它定义了一系列规则,使得开发者可以通过简单的命令来完成复杂的构建任务。针对"简单通用Makefile使用示例工程",我们可以深入探讨...

    Makefile.zip_Makefile模板_makefile

    比如,设置`CC`为你的C++编译器,`CFLAGS`添加所需的编译选项,可能还需要定义`LDFLAGS`(链接器选项)和`LDLIBS`(链接的库)。 此外,确保将源文件路径和目标文件路径正确地映射到依赖关系中,以便Makefile能够...

    linux的makefile文件例子

    本文将详细解析`Makefile`的基本结构、规则和常见指令,通过提供的"实验8_2"和"实验8_1"文件名,我们可以推测这可能是一些与`Makefile`相关的实践项目。 ### 1. `Makefile`概述 `Makefile`是一个文本文件,包含了...

    Makefile文件制作

    - 常见的变量包括`CFLAGS`(编译选项)、`LDFLAGS`(链接选项)等。 3. **模式匹配**: - 模式匹配使得Makefile更加灵活,能够处理复杂的文件名。 - 例如,`%.o: %.c`表示所有`.o`文件都依赖于同名的`.c`文件。 ...

    内核态makefile指南

    在较新的版本中,编译选项的变量已经从`EXTRA_CFLAGS`, `EXTRA_AFLAGS`和`EXTRA_LDFLAGS`更改为`ccflags-y`, `asflags-y`和`ldflags-y`。这些变量分别用于指定编译、汇编和链接时的参数。 5. **最简单的makefile...

    linux下构建多目录下Makefile产生so动态库样例

    在Linux环境下,构建多目录下的Makefile以生成.so动态库是一项常见的任务,特别是在大型软件项目中。这样的项目通常包含多个源文件,分布在不同的目录结构中,每个目录可能有自己的子Makefile,最终通过主Makefile来...

    跟我一起写makefile

    Makefile通常与`make`工具结合使用,该工具负责解析Makefile中的规则,并根据这些规则执行相应的编译或构建任务。 #### 第二部分:关于程序的编译和链接 在软件开发中,源代码文件需要经过**编译**(将源代码转换...

    Linux内核Makefile浅析

    - `CFLAGS`, `LDFLAGS`等:编译和链接时使用的标志,用于控制编译过程。 - `CC`: 指定的C编译器。 - `$(ARCH)`: 表示特定的CPU架构,例如`arm`,在arch目录下的Makefile中使用。 每个子目录的Makefile会根据`....

    app makefile 模板

    在IT行业中,构建和管理项目通常涉及到自动化工具,其中Makefile是C/C++等编程语言中广泛使用的一种构建脚本。Makefile是一个包含了编译、链接等步骤规则的文本文件,它帮助开发者有效地组织和执行编译过程。本文将...

Global site tag (gtag.js) - Google Analytics