国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
Makefile一問(wèn):如何修改.o輸出文件的輸出路徑 Linux/Unix社區(qū) / 程序開(kāi)...

我在Linux下編成時(shí),用Makefile文件生成的.o文件老是跟我的源文件在同一個(gè)目錄下,搞得我用TAB鍵之余還得先再敲.c再TAB,為什么要多敲兩次鍵盤?如果我把所有生成的.o文件放比如./obj目錄下,豈不是少來(lái)很多麻煩?而且ls時(shí)免得見(jiàn)到那么多垃圾多好?!  
   
  誰(shuí)愿意犧牲自己來(lái)幫忙搞定?我愿意提供100大洋來(lái)獎(jiǎng)勵(lì)!  
   
  比如我再./src下面有10個(gè)源文件(.cpp),再./include下有很多頭文件,我想在./src下編譯的obj文件(.o文件)放到./obj下。該如何?  
   
  要求:  
  1、別告訴我在每一個(gè)gcc   -c后面來(lái)一個(gè)mv指令  
  2、如果我已經(jīng)編譯過(guò)一次,后來(lái)我修改了一個(gè)文件,那么應(yīng)該也只編譯一個(gè)文件  
   
  問(wèn)題點(diǎn)數(shù):100、回復(fù)次數(shù):9Top

1 樓future_path(放眼未來(lái))回復(fù)于 2003-04-15 18:38:19 得分 10

不知你是用什么生成Makefile文件的。我以前用過(guò)tmake,先寫一個(gè).pro文件,然后用tmake生成Makefile。pro文件里有一個(gè)選項(xiàng)OBJDIR,修改它就可以改變目標(biāo)文件的存放路徑了。  
  建議你去下載一個(gè)tmake看一下,有什么問(wèn)題在寫出來(lái)大家討論。Top

2 樓hs_guanqi(關(guān)七)回復(fù)于 2003-04-15 18:42:52 得分 15

你在makefile里面.o文件之前加上路徑名就行了,比如../obj/main.o  
  注意使用-o選項(xiàng),使得所有目標(biāo)文件都存在../obj/目錄下Top

3 樓alangxy(阿郎)回復(fù)于 2003-04-16 13:58:20 得分 25

如樓上所說(shuō),給你舉個(gè)例子先:  
   
  假如預(yù)編譯x.cpp文件  
   
  ./obj/x.o:   ./src/x.cpp  
  g++   -c   ./src/x.cpp   -o   ./obj/x.oTop

4 樓eion(那個(gè)誰(shuí))回復(fù)于 2003-04-16 15:10:04 得分 0

謝謝各位大哥,你們的方法我知道,而且通過(guò)修改我的  
  http://expert.csdn.net/Expert/topic/1389/1389206.xml?temp=.1599237  
  上面的代碼也可以完成,不過(guò)我是想偷一下懶:每次不創(chuàng)建一個(gè)工程時(shí)不需要修改太多的信息。不如下面的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)  
   
  這個(gè)不需要做任何修改,就可以拷貝到任何C目錄下編譯(當(dāng)然要求所有的cpp文件在同一目錄下)  
   
  后來(lái)我做了一點(diǎn)改動(dòng),也就是:  
  $(GCC)   -o   $@   $(OBJECTS)   $(CFLAG)   $(SYSLIB)  
  改為:  
  $(GCC)   -o   $@   @(patsubst   %.o,./obj/%.o,$^)   $(CFLAG)   $(SYSLIB)  
   
   
  $(GCC)   -c   $<   $(CXXFLAG)  
  改為:  
  $(GCC)   -c   $<   $(CXXFLAG)   -o   ./obj/$(patsubst   %.cpp,%.o,$<)  
   
  它確實(shí)可以將編譯好的.o連接文件給我放到./obj下。但是不過(guò)何時(shí)編譯它都編譯所有文件。  
  請(qǐng)各位大哥再給出明確指示。將感激不禁?。?!  
   
  -----------------------------  
  我是一個(gè)懶人,不要責(zé)備我連這點(diǎn)事情都不愿意去做。  
  不過(guò)我相信:  
  是懶人在促進(jìn)世界的發(fā)展?。?a >Top

5 樓honix()回復(fù)于 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世紀(jì)牛頓)回復(fù)于 2003-04-16 15:32:14 得分 0

還是用專門工具來(lái)做這些吧,把自己從這些低級(jí)手工勞作中解放出來(lái)吧!Top

7 樓eion(那個(gè)誰(shuí))回復(fù)于 2003-04-16 17:39:54 得分 0

honix(春眠醒不了)   :  
  好,不過(guò)還是解決不了每次都編譯所有的問(wèn)題Top

8 樓honix()回復(fù)于 2003-04-16 18:26:58 得分 30

不可能吧,看看我機(jī)器上測(cè)試過(guò)程:  
   
  [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(那個(gè)誰(shuí))回復(fù)于 2003-04-17 09:40:32 得分 0

謝謝!總算找到問(wèn)題了。  
   
  很不好意思,我將原來(lái)的Makefile備份成makefile,我想Linux是區(qū)分大小寫的,所以就沒(méi)有在意。后來(lái)我突然發(fā)現(xiàn)我的Makefile有語(yǔ)法問(wèn)題,但是make時(shí)確沒(méi)有給我錯(cuò)誤。于是就懷疑到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拷貝到相應(yīng)的源文件下面,并再源文件的路徑處建立一個(gè)obj目錄,這樣每次Makefile就將產(chǎn)生的目標(biāo)文件放到obj目錄下,而不會(huì)煩你了。  
   
  謝謝honix(春眠醒不了)    
   
  等幾天再結(jié)貼吧,讓大家也看看

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
linux: 幾個(gè)常用makefile模板
第四十集 函數(shù)跨文件調(diào)用(GCC+Makefile篇)
Linux下gcc與g++用法以及編寫makefile
1.16. Building a Static Library with GNU Make
makefile的簡(jiǎn)單使用案例
利用NMAKE工具編程C++
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服