-2
target: $(patsubst %.c,%.o,$(wildcard ./src/*.c))
    @echo "making target"
    $(cc) $(patsubst %.c,%.o,$(wildcard ./src/*.c)) $(LIBS) -o gif 
#   $(cc) $(wildcard ./objects/*.o) $(LIBS) -o gif 

./objects/%.o: %.c
    @echo "making objects now"
    @mkdir -p ./objs
    $(cc) $(CFLAGS) $(LDFLAGS) -c $< -o ./objects/$@

问题是对象 .o 文件是在 src 文件夹中创建的。我希望在对象文件夹中创建对象。请帮忙?

输出是

making target
gcc ./src/gif_display.o ./src/gif_lzw.o ./src/gif_read.o ./src/sysm.o ./src/x86_main.o -lm -lc -o gif 
4

2 回答 2

1

以另一种方式格式化,输出如下所示:

[joshis1@(none) GIF_Utility]$ make target
echo "making target"
making target
gcc -lm -lc -o gif
/usr/lib/gcc/i686-redhat-linux/4.6.3/../../../crt1.o: In function _start': (.text+0x18): undefined reference tomain' collect2: ld returned 1 exit status make: * [target] Error 1
[joshis1@(none) GIF_Utility]$

实际的编译行是:

gcc -lm -lc -o gif

如您所见,没有输入文件提供给编译器,因此问题出在您使用patsubst. 如果你用这样的东西替换它,它将正确生成你想要的文件列表:

$(patsubst %.c,%.o,$(wildcard ./src/*))
于 2013-08-27T07:26:47.500 回答
0

您需要修复您的 patsubst 以更改目录:

$(patsubst ./src/%.c,./objs/%.o,$(wildcard ./src/*.c))
于 2013-08-27T10:05:11.997 回答