指哪打哪地进行编译工作

来源:互联网 发布:linux 开源日志服务器 编辑:程序博客网 时间:2024/06/05 10:03

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

起因

最近在看 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/libsSRC_PATH        = ./INCLUDE_PATH    = $(LIB_PATH)LIB             = $(wildcard $(LIB_PATH)/*.c)INCLUDE         = $(wildcard $(LIB_PATH)/*.h)CUR             = $(shell printenv CUR)DEBUG           = -gall: $(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 调试的文件了。有种指哪打哪的快感!

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

简静慢

0 0
原创粉丝点击