作者Gold740716 (项为之强)
看板Linux
标题Re: [问题] makefile 引入问题
时间Wed Apr 8 14:29:51 2020
想到一个解法,
在 makefile 里再启动一个带 -I ../plus 参数的 make 。
虽然有点智障,但也想不到更好的解法。
范例程式如下:
```
OBJ_C := foo
ifeq (,$(findstring ../plus,$(.INCLUDE_DIRS)))
target := include-plus
else
include plus.mk
target := out
endif
target: $(target)
include-plus:
$(MAKE) -I ../plus $(MAKECMDGOALS)
out: $(OBJ_C)
@echo $(OBJ_C)
gcc -c $^
.PHONY: target include-plus out
```
其中八个空格是 tab 。
大概就是如果 include 路径没有 ../plus 的话,
就新开一个带 -I ../plus 的 make ,
并在该 make 里再正式编译。
我对 make 没有像 port 那麽熟,
所以有些写法可能不是很优雅。
另外你的 out 目标看起来也是伪目标,
所以帮你加在 .PHONY 里。
※ 引述《j5128709 (j5128709)》之铭言:
: 小弟最近刚入门Linux
: 想尝试一些阶层式makefile管理
: 踢到铁板...来问两个蠢问题
: 环境: ubuntu 16.04
: 架构:
: /home/xx/main
: - main.c
: - makefile
: /home/xx/plus
: - plus.c
: - plus.mk
: makefile内容为: plus.mk:
: 1: OBJ_C = main.c $(OBJ_C) += plus.c
: 2:
: 3: include plus.mk
: 4:
: 5: out: $(OBJ_C)
: 6: @echo $(OBJ_C)
: 7: gcc -c $^
: make下去後,会说找不到 plus.mk,上网查了一下
: 使用
: --include-dir=../plus or -I../plus
: --include-dir=/home/xx/plus or -I/home/xx/plus
: (上述的指令我都写在 include plus.mk上面)
: 上述四种都会失败,目前成功的是
: 直接在第3行 暴力写出"include ../plus/plus.mk"
: Q1:想把路径拉出来,让第3行乾净的 include xx.mk
: 我指令使用错吗?
: Q2:我假如成功引用plus.mk後
: 但是我的第6行 显示$(OBJ_C)这个变数时,只有main.c
: 我想问说,如何让plus.c 附加上去?
: 谢谢各位高手们...
: 看完小弟愚蠢的问题
--
这个社会一直在谈家庭、教育,以及工作间的平衡,我辞职之後回家带小孩,
我没想到这个社会是如此的不安全。
我真的很希望政府、各级单位,能够做些事情让妈妈放心带小孩,
或者是让妈妈放心工作
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.113.127.95 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Linux/M.1586327394.A.F26.html
※ 编辑: Gold740716 (140.113.127.95 台湾), 04/08/2020 14:33:05
1F:→ j5128709: 感谢!gold大 04/09 21:36