繁体   English   中英

如何用-S和-c编写makefile来编译?

[英]How to write makefile to compile with -S and -c?

我有一个源文件test.c和它的头test.h ,一个文件main.cmakefile 我想设置我的makefile,以便它(1)编译test.c以构建可执行的test.o ,并且(2)编译test.c以使用-S标志将汇编代码打印到test.s

我试图设置makefile,因为我认为是正确的,但这当然不会运行最后一个test.s行。

FLAGS = -c -Wall
CC = gcc
ASM = -S

all : optimize
optimize: main.o test.o
    $(CC) main.o test.o -o optimize
main.o: main.c test.h
    $(CC) $(FLAGS) main.c
test.o: test.h test.c
    $(CC) $(FLAGS) test.c
test.s: test.h test.c
    $(CC) $(ASM) -Wall test.c

谁能告诉我如何我应该有这种不同的结构, 同时创建test.s和test.o?

我尝试将optimize: line和以下内容更改为:

optimize: main.o test.o test.s
    $(CC) main.o test.o test.s -o optimize

但是链接器错误地multiple definition of 'test'

只需将test.s添加到以optimize:开头的行。

这样做是将规则test.s添加到优化行的依赖项中。

您也可以按照Vaughn Cato的建议将其添加到所有行。

重要的是要知道规则test.s和文件test.s之间存在差异

您可以将任何您想要的内容作为规则的名称,但按照惯例,您通常只使用文件名。

这是一个可以做你想做的Makefile的例子。 我把dep放在所有,所以你可以make asm ,我也将规则名称更改为asm以保持清晰。

FLAGS = -c -Wall
CC = gcc
ASM = -S

all : optimize asm
optimize: main.o test.o
    $(CC) main.o test.o -o optimize
main.o: main.c test.h
    $(CC) $(FLAGS) main.c
test.o: test.h test.c
    $(CC) $(FLAGS) test.c
asm: test.h test.c
    $(CC) $(ASM) -Wall test.c -o test.s

最后,因为你对Makefiles的工作方式看起来有点不稳定(我不诚实地责怪你),我建议你阅读这个教程: http//mrbook.org/tutorials/make/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM