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
答案 0 :(得分: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/*))
答案 1 :(得分:0)
您需要修复您的patsubst才能更改目录:
$(patsubst ./src/%.c,./objs/%.o,$(wildcard ./src/*.c))