我在Linux下编成时,用Makefile文件生成的.o文件老是跟我的源文件在同一个目录下,搞得我用TAB键之余还得先再敲.c再TAB,为什么要多敲两次键盘?如果我把所有生成的.o文件放比如./obj目录下,岂不是少来很多麻烦?而且ls时免得见到那么多垃圾多好?!
谁愿意牺牲自己来帮忙搞定?我愿意提供100大洋来奖励!
比如我再./src下面有10个源文件(.cpp),再./include下有很多头文件,我想在./src下编译的obj文件(.o文件)放到./obj下。该如何?
要求:
1、别告诉我在每一个gcc -c后面来一个mv指令
2、如果我已经编译过一次,后来我修改了一个文件,那么应该也只编译一个文件
不知你是用什么生成Makefile文件的。我以前用过tmake,先写一个.pro文件,然后用tmake生成Makefile。pro文件里有一个选项OBJDIR,修改它就可以改变目标文件的存放路径了。
建议你去下载一个tmake看一下,有什么问题在写出来大家讨论。
你在makefile里面.o文件之前加上路径名就行了,比如../obj/main.o
注意使用-o选项,使得所有目标文件都存在../obj/目录下
如楼上所说,给你举个例子先:
假如预编译x.cpp文件
./obj/x.o: ./src/x.cpp
g++ -c ./src/x.cpp -o ./obj/x.o
OBJDIR=obj
OBJS=$(patsubst %.c,$(OBJDIR)/%.o,$(wildcard *.c))
all : $(OBJS)
$(OBJDIR)/%.o : %.c
cc -o $@ $<
不可能吧,看看我机器上测试过程:
[root@galileo tmp]# ls
Makefile obj readpci.c
[root@galileo tmp]# cat Makefile
OBJDIR=obj
OBJS=$(patsubst %.c,$(OBJDIR)/%.o,$(wildcard *.c))
all : $(OBJS)
$(OBJDIR)/%.o : %.c
cc -o $@ $<
[root@galileo tmp]# make
cc -o obj/readpci.o readpci.c
[root@galileo tmp]# make
make: Nothing to be done for `all.
[root@galileo tmp]#