第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

如何將目標(biāo)文件放在單獨(dú)的子目錄中

如何將目標(biāo)文件放在單獨(dú)的子目錄中

我在嘗試使用make將目標(biāo)文件放在單獨(dú)的子目錄中時(shí)遇到麻煩,這可能是一種非?;镜募夹g(shù)。我試圖使用此頁面中的信息:http : //www.gnu.org/software/hello/manual/make/Prerequisite-Types.html#Prerequisite-Types我從make得到以下輸出:make: *** No rule to make target `ku.h', needed by `obj/kumain.o'.  Stop.但是ku.h不是目標(biāo)而是依賴關(guān)系(盡管它顯然已#include在c源文件中)。當(dāng)我不嘗試使用子目錄存儲目標(biāo)文件時(shí)(即錯(cuò)過OBJDIR部分),它可以正常工作。為什么使ku.h是目標(biāo)?我的makefile是這樣的:(樣式是在閱讀了各種信息源之后的).SUFFIXES:.SUFFIXES: .c .oCC=gcc CPPFLAGS=-WallLDLIBS=-lhpdfVPATH=%.c srcVPATH=%.h srcVPATH=%.o objOBJDIR=objobjects= $(addprefix $(OBJDIR)/, kumain.o kudlx.o kusolvesk.o kugetpuz.o kuutils.o \  kurand.o kuASCboard.o kuPDFs.o kupuzstrings.o kugensud.o \  kushapes.o )ku : $(objects)  $(CC) $(CPPFLAGS) -o ku $(objects) $(LDLIBS)$(objects) : ku.h kudefines.h kuglobals.h kufns.h | $(OBJDIR)$(OBJDIR):  mkdir $(OBJDIR).PHONY: cleanclean :  rm $(objects)編輯:我應(yīng)用更改以使用vpath指令。我的版本是VPATH = xxx和vpath%.c xxx的不良混合。但是,我現(xiàn)在遇到了另一個(gè)問題(這是我添加錯(cuò)誤的vpath之前的原始問題)。現(xiàn)在是輸出:    gcc  -o ku -lhpdf obj/kumain.o obj/kudlx.o obj/kusolvesk.o ..etc    gcc: obj/kumain.o: No such file or directory    gcc: obj/kudlx.o: No such file or directory    gcc: obj/kusolvesk.o: No such file or directory    gcc: obj/kugetpuz.o: No such file or directory    gcc: obj/kuutils.o: No such file or directory    gcc: obj/kurand.o: No such file or directory    gcc: obj/kuASCboard.o: No such file or directory    gcc: obj/kuPDFs.o: No such file or directory    gcc: obj/kupuzstrings.o: No such file or directory    gcc: obj/kugensud.o: No such file or directory    gcc: obj/kushapes.o: No such file or directory    make: *** [ku] Error 1盡管手冊中說“隱式規(guī)則告訴make如何使用慣用技術(shù),以便您不必在使用它們時(shí)詳細(xì)指定它們,但make似乎并未將隱式規(guī)則應(yīng)用于目標(biāo)文件。是C編譯的隱式規(guī)則,文件名決定運(yùn)行哪些隱式規(guī)則,例如,C編譯通常需要一個(gè).c文件并創(chuàng)建一個(gè).o文件,因此當(dāng)make看到此組合時(shí),make將隱式規(guī)則應(yīng)用于C編譯。文件名結(jié)尾。” 以及“在考慮隱式規(guī)則的過程中也會發(fā)生在VPATH或vpath中指定目錄的搜索(請參閱使用隱式規(guī)則)?!痹俅卧诖颂帯袄?,當(dāng)文件foo.o沒有顯式規(guī)則時(shí),make考慮隱式規(guī)則,例如內(nèi)置規(guī)則,以編譯foo.c(如果該文件存在。如果當(dāng)前目錄中缺少該文件,在適當(dāng)?shù)哪夸浿羞M(jìn)行搜索。如果在任何目錄中都存在foo.c(或在makefile中提到),則將應(yīng)用C編譯的隱式規(guī)則。”在使隱式規(guī)則適用于我的makefile方面的任何幫助將不勝感激。
查看完整描述

3 回答

?
當(dāng)年話下

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊

由于您使用的是GNUmake,因此請使用模式規(guī)則來編譯目標(biāo)文件:


$(OBJDIR)/%.o: %.c

    $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<


查看完整回答
反對 回復(fù) 2019-10-08
?
慕哥6287543

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊

這是我用于大多數(shù)項(xiàng)目的makefile,


它允許將源文件,頭文件和內(nèi)聯(lián)文件放在子文件夾以及子文件夾的子文件夾等中,并會自動為每個(gè)對象生成一個(gè)依賴文件。這意味著對頭文件和內(nèi)聯(lián)文件的修改將觸發(fā)對相關(guān)文件的重新編譯。


通過shell find命令檢測到源文件,因此無需明確指定,只需對您的內(nèi)容進(jìn)行編碼即可。


編譯項(xiàng)目時(shí),它還將所有文件從“資源”文件夾復(fù)制到bin文件夾中,而我在大多數(shù)情況下都很方便。


為了提供應(yīng)有的信譽(yù),自動依賴功能主要基于Scott McPeak的頁面(可在此處找到),并進(jìn)行了一些其他修改/調(diào)整以滿足我的需求。


示例文件


#Compiler and Linker

CC          := g++-mp-4.7


#The Target Binary Program

TARGET      := program


#The Directories, Source, Includes, Objects, Binary and Resources

SRCDIR      := src

INCDIR      := inc

BUILDDIR    := obj

TARGETDIR   := bin

RESDIR      := res

SRCEXT      := cpp

DEPEXT      := d

OBJEXT      := o


#Flags, Libraries and Includes

CFLAGS      := -fopenmp -Wall -O3 -g

LIB         := -fopenmp -lm -larmadillo

INC         := -I$(INCDIR) -I/usr/local/include

INCDEP      := -I$(INCDIR)


#---------------------------------------------------------------------------------

#DO NOT EDIT BELOW THIS LINE

#---------------------------------------------------------------------------------

SOURCES     := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))

OBJECTS     := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.$(OBJEXT)))


#Defauilt Make

all: resources $(TARGET)


#Remake

remake: cleaner all


#Copy Resources from Resources Directory to Target Directory

resources: directories

    @cp $(RESDIR)/* $(TARGETDIR)/


#Make the Directories

directories:

    @mkdir -p $(TARGETDIR)

    @mkdir -p $(BUILDDIR)


#Clean only Objecst

clean:

    @$(RM) -rf $(BUILDDIR)


#Full Clean, Objects and Binaries

cleaner: clean

    @$(RM) -rf $(TARGETDIR)


#Pull in dependency info for *existing* .o files

-include $(OBJECTS:.$(OBJEXT)=.$(DEPEXT))


#Link

$(TARGET): $(OBJECTS)

    $(CC) -o $(TARGETDIR)/$(TARGET) $^ $(LIB)


#Compile

$(BUILDDIR)/%.$(OBJEXT): $(SRCDIR)/%.$(SRCEXT)

    @mkdir -p $(dir $@)

    $(CC) $(CFLAGS) $(INC) -c -o $@ $<

    @$(CC) $(CFLAGS) $(INCDEP) -MM $(SRCDIR)/$*.$(SRCEXT) > $(BUILDDIR)/$*.$(DEPEXT)

    @cp -f $(BUILDDIR)/$*.$(DEPEXT) $(BUILDDIR)/$*.$(DEPEXT).tmp

    @sed -e 's|.*:|$(BUILDDIR)/$*.$(OBJEXT):|' < $(BUILDDIR)/$*.$(DEPEXT).tmp > $(BUILDDIR)/$*.$(DEPEXT)

    @sed -e 's/.*://' -e 's/\\$$//' < $(BUILDDIR)/$*.$(DEPEXT).tmp | fmt -1 | sed -e 's/^ *//' -e 's/$$/:/' >> $(BUILDDIR)/$*.$(DEPEXT)

    @rm -f $(BUILDDIR)/$*.$(DEPEXT).tmp


#Non-File Targets

.PHONY: all remake clean cleaner resources


查看完整回答
反對 回復(fù) 2019-10-08
  • 3 回答
  • 0 關(guān)注
  • 1031 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號