我有一行Makefile:
thing.o: thing.c
我想给出一个明确的命令来做同样的事情,因为我需要修改运行的内容。
隐含的命令是什么?
如果我尝试:
$(CC) $(CFLAGS) thing.c -o thing.o
我收到错误,所以我认为这不是隐含的。
当我使用隐式make规则(即我指定no命令)时,它可以正常工作。
(仅当明确指定命令时,错误是:
/opt/avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -g -Wall -mcall-prologues -mmcu=atmega328p -Os thing.o -Wl,-gc-sections -Wl,-relax -o pmu.obj
pmu.o: In function `__vector_22':
(.text+0x7c): multiple definition of `__bad_interrupt'
/opt/avr8-gnu-toolchain-linux_x86_64/bin/../lib/gcc/avr/4.9.2/../../../../avr/lib/avr5/crtatmega328p.o:(.text+0x0): first defined here
/opt/avr8-gnu-toolchain-linux_x86_64/bin/../lib/gcc/avr/4.9.2/../../../../avr/bin/ld: Disabling relaxation: it will not work with multiple definitions
thing.o: In function `__vectors':
(.text+0x0): multiple definition of `__vectors'
/opt/avr8-gnu-toolchain-linux_x86_64/bin/../lib/gcc/avr/4.9.2/../../../../avr/lib/avr5/crtatmega328p.o:(.vectors+0x0): first defined here
collect2: error: ld returned 1 exit status
make: *** [thing.obj] Error 1
但确切的错误并不重要 - 我需要找到我可以替换隐式命令的内容。)
答案 0 :(得分:1)
它只是编译(不是链接),因此你需要选项-c:
$(CC) $(CFLAGS) -c thing.c
答案 1 :(得分:1)
您可以使用make -pn
转储内置规则,您正在寻找的规则是
%.o: %.c
$(COMPILE.c) $(OUTPUT_OPTION) $<
可以进一步细分为
$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@ $<
{p> -c
可能是罪魁祸首,尽管CPPFLAGS
也可能发挥作用。