makefile obj文件路径_Makefile一问:如何修改.o输出文件的输出路径 Linux/Unix社区 / 程序开......
我在Linux下編成時,用Makefile文件生成的.o文件老是跟我的源文件在同一個目錄下,搞得我用TAB鍵之余還得先再敲.c再TAB,為什么要多敲兩次鍵盤?如果我把所有生成的.o文件放比如./obj目錄下,豈不是少來很多麻煩?而且ls時免得見到那么多垃圾多好?!
誰愿意犧牲自己來幫忙搞定?我愿意提供100大洋來獎勵!
比如我再./src下面有10個源文件(.cpp),再./include下有很多頭文件,我想在./src下編譯的obj文件(.o文件)放到./obj下。該如何?
要求:
1、別告訴我在每一個gcc ? -c后面來一個mv指令
2、如果我已經編譯過一次,后來我修改了一個文件,那么應該也只編譯一個文件
問題點數:100、回復次數:9Top
1 樓future_path(放眼未來)回復于 2003-04-15 18:38:19 得分 10
不知你是用什么生成Makefile文件的。我以前用過tmake,先寫一個.pro文件,然后用tmake生成Makefile。pro文件里有一個選項OBJDIR,修改它就可以改變目標文件的存放路徑了。
建議你去下載一個tmake看一下,有什么問題在寫出來大家討論。Top
2 樓hs_guanqi(關七)回復于 2003-04-15 18:42:52 得分 15
你在makefile里面.o文件之前加上路徑名就行了,比如../obj/main.o
注意使用-o選項,使得所有目標文件都存在../obj/目錄下Top
3 樓alangxy(阿郎)回復于 2003-04-16 13:58:20 得分 25
如樓上所說,給你舉個例子先:
假如預編譯x.cpp文件
./obj/x.o: ? ./src/x.cpp
g++ ? -c ? ./src/x.cpp ? -o ? ./obj/x.oTop
4 樓eion(那個誰)回復于 2003-04-16 15:10:04 得分 0
謝謝各位大哥,你們的方法我知道,而且通過修改我的
http://expert.csdn.net/Expert/topic/1389/1389206.xml?temp=.1599237
上面的代碼也可以完成,不過我是想偷一下懶:每次不創建一個工程時不需要修改太多的信息。不如下面的Makefile文件:
PROJECT=abc
SYSLIB=-lpthread
CFLAG=-g
CXXFLAG=
CC=gcc
GCC=gcc
SOURCES=$(wildcard ? *.cpp)
OBJECTS=$(patsubst ? %.cpp,%.o,$(SOURCES))
$(PROJECT):$(OBJECTS)
$(GCC) ? -o ? $@ ? $(OBJECTS) ? $(CFLAG) ? $(SYSLIB)
.cpp.o:
$(GCC) ? -c ? $< ? $(CXXFLAG)
clean:
rm ? -rf ? *.o ? $(PROJECT)
這個不需要做任何修改,就可以拷貝到任何C目錄下編譯(當然要求所有的cpp文件在同一目錄下)
后來我做了一點改動,也就是:
$(GCC) ? -o ? $@ ? $(OBJECTS) ? $(CFLAG) ? $(SYSLIB)
改為:
$(GCC) ? -o ? $@ ? @(patsubst ? %.o,./obj/%.o,$^) ? $(CFLAG) ? $(SYSLIB)
$(GCC) ? -c ? $< ? $(CXXFLAG)
改為:
$(GCC) ? -c ? $< ? $(CXXFLAG) ? -o ? ./obj/$(patsubst ? %.cpp,%.o,$
它確實可以將編譯好的.o連接文件給我放到./obj下。但是不過何時編譯它都編譯所有文件。
請各位大哥再給出明確指示。將感激不禁!!!
-----------------------------
我是一個懶人,不要責備我連這點事情都不愿意去做。
不過我相信:
是懶人在促進世界的發展!!Top
5 樓honix()回復于 2003-04-16 15:19:11 得分 20
OBJDIR=obj
OBJS=$(patsubst ? %.c,$(OBJDIR)/%.o,$(wildcard ? *.c))
all ? : ? $(OBJS)
$(OBJDIR)/%.o ? : ? %.c
cc ? -o ? $@ ? $<
Top
6 樓tiejun(21世紀牛頓)回復于 2003-04-16 15:32:14 得分 0
還是用專門工具來做這些吧,把自己從這些低級手工勞作中解放出來吧!Top
7 樓eion(那個誰)回復于 2003-04-16 17:39:54 得分 0
honix(春眠醒不了) ? :
好,不過還是解決不了每次都編譯所有的問題Top
8 樓honix()回復于 2003-04-16 18:26:58 得分 30
不可能吧,看看我機器上測試過程:
[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]#
Top
9 樓eion(那個誰)回復于 2003-04-17 09:40:32 得分 0
謝謝!總算找到問題了。
很不好意思,我將原來的Makefile備份成makefile,我想Linux是區分大小寫的,所以就沒有在意。后來我突然發現我的Makefile有語法問題,但是make時確沒有給我錯誤。于是就懷疑到makefile上,將makefile移走,再make就OK了
我將Makefile改寫成下面的形式:
PROJECT=abc
MYLIB=
SYSLIB=
CFLAG=-g
CC=gcc
GCC=gcc
OBJDIR=./obj
SRCS=$(wildcard ? *.cpp)
OBJS=$(patsubst ? %.cpp,$(OBJDIR)/.o,$(SRCS))
$(PROJECT):$(OBJS)
$(GCC) ? -o ? $@ ? $^ ? $(CFLAG) ? $(SYSLIB) ? $(MYLIB)
$(OBJDIR)/%.o:%.cpp
$(GCC) ? -c ? -o ? $@ ? $<
clean:
rm ? -f ? $(OBJDIR)/*.o ? $(PROJECT)
這樣每次只需要將Makefile拷貝到相應的源文件下面,并再源文件的路徑處建立一個obj目錄,這樣每次Makefile就將產生的目標文件放到obj目錄下,而不會煩你了。
謝謝honix(春眠醒不了)
等幾天再結貼吧,讓大家也看看
總結
以上是生活随笔為你收集整理的makefile obj文件路径_Makefile一问:如何修改.o输出文件的输出路径 Linux/Unix社区 / 程序开......的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设置谷歌浏览器默认首页的方法
- 下一篇: Java JSON对象怎么遍历_Java