哪位大佬来看一个Makefile中的选项
软件是iptables 1.4.5的extensions/GNUmakefile.in:
- AM_DEPFLAGS = -Wp,-MMD,$(@D)/.$(@F).d,-MT,$@
复制代码
- init%.o: init%.c
- ${CC} ${AM_DEPFLAGS} ${AM_CFLAGS} -D_INIT=$*_init ${CFLAGS} -o $@ -c $<;
复制代码
我知道-Wp是把后面的几个逗号分隔的参数传给Preprocessor,@的几个是用文件名和路径替换,但整体上还是有点儿糊涂。
这所以对这个有兴趣是因为我用的交叉编译器加上这个编译就会失败,而且出错的信息有点奇怪,下面是单个文件手工编译时的信息:
- tile-gcc -Wp,-MMD,./.initext4.o.d,-MT,initext4.o -D_LARGEFILE_SOURCE=1 -D_LARGE_FILES -D_FILE_OFFSET_BITS=64 -D_REENTRANT -Wall -Waggregate-return -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Winline -pipe -DXTABLES_LIBDIR=\"/home/Cyberman/iptables-1.4.5/x86_64_build/libexec/xtables\" -DXTABLES_INTERNAL -I../include -I../include -D_INIT=ext4_init -g -O2 -o initext4.o -c initext4.c;
- Warning: Unrecognized option ( ) in "-MT"
- tile-cc: ignoring unknown warning option -Waggregate-return
- tile-cc: ignoring unknown warning option -Wredundant-decls
- tile-cc: ignoring unknown warning option -Winline
- "initext4.c": Error: Can't open intermediate compiler file (/tmp/ctmB.6HstQU): Invalid argument
复制代码
当然我们的编译器只是模仿了GCC的选项,不是直接用GCC实现的,所以有这种差异也很正常。目前我是直接去掉这个完成编译的,但真正要用还是需要正解原来的Makefile中为什么使用这个,如去掉了会不会导致头文件修改之后不重新编译等。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
-MT是表示在生成.d文件的时候使用你指定的字符串作为目标,而不是默认的将.c换成.o
单纯的一个-MT我还大概知道,但这几个连在一起我看得有点糊涂了。我现在最关心的是这个去掉有多大影响,因为我的编译器虽然支持GCC选项,但不是100%兼容的,加上这个就出错。如果只是依赖视别,那大不了每次干脆clean了重编,反正软件不大,我的4核工作站用-j 4编译它还是很快的。
那可以看看生成的.d文件。如果目标和依赖没错就没问题