指哪打哪地进行编译工作

欢迎大家访问我的个人博客

起因

最近在看 APUE,里面有很多小的例子可以用来练手。不过这就有一个问题了:APUE 有一个公用的头文件和自己封装的错误处理例程,每次编译要指定相应的目录和文件确实是很麻烦。make 确实可以解决这个问题,但是如何指定要编译的文件就是一个问题。所以,我们现在的问题是:如何让 makefile 可以指定要编译的文件。经过一方摸索之后,总算是解决了这个问题。

Solution

我的解决方法很简单,就是通过引入 shell 的环境变量。我定义了一个环境变量 CUR ,用来指定当前要编译的文件名。然后通过 makefile 里面的 shell 函数,通过 printenv CUR 在 makefile 获取当前要编译的文件名。

同时,为了方便,我想要复用这个 makefile,所以我先将这个 makefile 放在一个固定的位置,然后在我的 shell 配置文件(我用的是 zsh,所以配置文件是 .zshrc,如果你用的是 bash,那么就是 .bashrc,其他类推)使用一个函数,每次调用都使用这个 makefile 模板来编译(可以使用 make 的 -f 参数来指定 makefile)。

好了,说了这么多,我把我的 makefile 模板和 shell 相应的函数放上来跟大家一起共享,欢迎讨论。

LIB_PATH        = ~/Code/libs
SRC_PATH        = ./
INCLUDE_PATH    = $(LIB_PATH)

LIB             = $(wildcard $(LIB_PATH)/*.c)
INCLUDE         = $(wildcard $(LIB_PATH)/*.h)
CUR             = $(shell printenv CUR)

DEBUG           = -g

all: $(LIB) $(INCLUDE) $(CUR)
        gcc -I $(INCLUDE_PATH) $(LIB) $(CUR) -o $(subst .c,.o,$(CUR))

debug: $(LIB) $(INCLUDE) $(CUR)
        gcc -I $(INCLUDE_PATH) $(LIB) $(CUR) $(DEBUG) -o $(subst .c,.debug,$(CUR))
go() {
        export CUR="$1"
        make -f ~/Templates/Makefile
}

de() {
        export CUR="$1"
        make -f ~/Templates/Makefile debug
}

这样,我们只需要在要编译的时候,使用 go 你要编译的文件名 就可以了直接编译了,使用 de 你要编译的文件名 就可以编译可以用 gdb 调试的文件了。有种指哪打哪的快感!

欢迎大家关注我的微信公众号:

简静慢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值