如何自动将“.s”添加到我的 Makefile 中的目标?
How can I automatically add '.s' to a target in my Makefile?
我有一个假 debug
和 asm
目标。 debug
通过更新变量 CFLAGS
来工作,然后编译正常目标,它使用这些新的 CFLAGS
来生成调试符号。这按预期工作。
类似地,我想定义 asm
目标,设置 -S
开关并将输出名称从 file
更改为 file.s
。但是,最后一部分不起作用,我得到:
$ make asm -B
gcc -fmessage-length=0 -ansi -pedantic -Werror -Wall -Wextra -Wwrite-strings -Winit-self -Wcast-align -Wcast-qual -Wpointer-arith -Wstrict-aliasing -Wformat=2 -Wmissing-declarations -Wmissing-include-dirs -Wno-unused-parameter -Wuninitialized -Wold-style-definition -Wstrict-prototypes -Wmissing-prototypes -Wdouble-promotion -S -masm=intel file.c -o file
注意最后一部分 [..] -S -masm=intel file.c -o file
带有额外参数但没有 .s
扩展名。
我错过了什么?
生成文件:
TARGET=file
SOURCE=*.c
HEADERS=*.h
TESTS=*.sh
PROJECT=$(TARGET) $(SOURCE) $(HEADERS) $(TESTS) Makefile
CC=gcc
CFLAGS=\
-ansi \
-pedantic \
-Wall \
# makefile-rules that don't produce files directly
.PHONY: default all debug asm
default: $(TARGET)
# Compile
$(TARGET): $(SOURCE) $(HEADERS) $(TESTS)
$(CC) $(CFLAGS) $< -o $@
debug: CFLAGS += -DDEBUG -ggdb
debug: $(TARGET)
asm: CFLAGS +=-S -masm=intel
asm: TARGET +=.s <------------------ THIS LINE !!!!!!
asm: $(TARGET)
您可以只向规则添加一个 $(TARGET).s
目标并在 asm
:
中使用它
$(TARGET) $(TARGET).s: $(SOURCE) $(HEADERS) $(TESTS)
$(CC) $(CFLAGS) $< -o $@
asm: CFLAGS += -S -masm=intel
asm: $(TARGET).s
我有一个假 debug
和 asm
目标。 debug
通过更新变量 CFLAGS
来工作,然后编译正常目标,它使用这些新的 CFLAGS
来生成调试符号。这按预期工作。
类似地,我想定义 asm
目标,设置 -S
开关并将输出名称从 file
更改为 file.s
。但是,最后一部分不起作用,我得到:
$ make asm -B
gcc -fmessage-length=0 -ansi -pedantic -Werror -Wall -Wextra -Wwrite-strings -Winit-self -Wcast-align -Wcast-qual -Wpointer-arith -Wstrict-aliasing -Wformat=2 -Wmissing-declarations -Wmissing-include-dirs -Wno-unused-parameter -Wuninitialized -Wold-style-definition -Wstrict-prototypes -Wmissing-prototypes -Wdouble-promotion -S -masm=intel file.c -o file
注意最后一部分 [..] -S -masm=intel file.c -o file
带有额外参数但没有 .s
扩展名。
我错过了什么?
生成文件:
TARGET=file
SOURCE=*.c
HEADERS=*.h
TESTS=*.sh
PROJECT=$(TARGET) $(SOURCE) $(HEADERS) $(TESTS) Makefile
CC=gcc
CFLAGS=\
-ansi \
-pedantic \
-Wall \
# makefile-rules that don't produce files directly
.PHONY: default all debug asm
default: $(TARGET)
# Compile
$(TARGET): $(SOURCE) $(HEADERS) $(TESTS)
$(CC) $(CFLAGS) $< -o $@
debug: CFLAGS += -DDEBUG -ggdb
debug: $(TARGET)
asm: CFLAGS +=-S -masm=intel
asm: TARGET +=.s <------------------ THIS LINE !!!!!!
asm: $(TARGET)
您可以只向规则添加一个 $(TARGET).s
目标并在 asm
:
$(TARGET) $(TARGET).s: $(SOURCE) $(HEADERS) $(TESTS)
$(CC) $(CFLAGS) $< -o $@
asm: CFLAGS += -S -masm=intel
asm: $(TARGET).s