makefile,gcc总结

makefile

include

"include"指示符告诉 make 暂停读取当前的 Makefile,而转去读取"include"指定的一个或者多个文件,完成以后再继续当前 Makefile 的读取。

如果在当前目录下或者指定的绝对路径找不到目标文件,make将根据文件名进行查找:

  1. 查找使用命令行选项 “-I” 指定的目录;

  2. “/usr/gnu/include”,"/usr/local/include","/usr/include",如果这些目录存在的话;

当在这些目录下都没有找到“include”指定的文件时,make将会提示一个包含文件未找到的告警提示,但是不会立刻退出。而是继续处理Makefile的后续内容。当完成读取整个Makefile后,make将试图使用规则来创建通过指示符“include”指定的但未找到的文件,当不能创建它时(没有创建这个文件的规则),make将提示致命错误并退出。

有时候,当被include的文件不重要时,也就是说是否include了,没太大关系,那么可以在include前加"-",表示忽略该错误。

-include FILENAMES…

使用这种方式时,当所要包含的文件不存在时不会有错误提示、make也不会退出。

CC 与 CXX

这是 C 与 C++ 编译器命令。默认值一般是 “gcc” 与 “g++”。

CPPFLAGS

这是用于预处理阶段的选项。

CFLAGS 与 CXXFLAGS

CFLAGS 表示用于 C 编译器的选项,CXXFLAGS 表示用于 C++ 编译器的选项。这两个变量实际上涵盖了编译和汇编两个步骤。
使用 c++11:
CXXFLAGS += -std=c++11

= := ?= +=

  • ?=
    如果没有被赋值过就赋予等号后面的值。
  • +=
    添加等号后面的值 。
  • =
    make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子:
    x = foo
    y = $(x) bar
    x = xyz
    在上例中,y的值将会是 xyz bar ,而不是 foo bar 。
  • :=
    表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。
    x := foo
    y := $(x) bar
    x := xyz
    在上例中,y的值将会是 foo bar ,而不是 xyz bar 了。

-Wl:rpath=path

这条编译指令会在编译时记录到target文件中,所以编译之后的target文件在执行时会按这里给出的路径去找库文件。

如:-Wl:rpath=/home/hello/lib

表示将/home/hello/lib目录作为程序运行时第一个寻找库文件的目录,
程序寻找顺序是:/home/hello/lib ,/usr/lib,/usr/local/lib
可以加多个包含路径,程序在运行时的寻找顺序为添加的顺序。

wildcard

这个命令是文件名处理函数:$(wildcard pattern),获取跟当前模式匹配的文件名。

gcc

shared:生成共享库格式

fPIC: 产生位置无关码,允许在任何地址加载 (否则只能从指定地址加载,无法控制)相对地址

-l :就是用来指定程序要链接的库;

-L :放在 /lib 和 /usr/lib 和 /usr/local/lib 里的库直接用 -l 参数就能链接了,但如果库文件没放在这三个目录里,而是放在其他目录里,编译时就要用 -L参数指定库路径;

-I :参数是用来指定头文件目录,/usr/include 目录一般是不用指定的,gcc 知道去那里找,但是如果头文件不在 /usr/include 里我们就要用 -I 参数指定了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值