在gcc中生成目标文件时创建目录

时间:2015-03-07 20:22:27

标签: gcc makefile

gcc -o abc/def.o def.c在目录def.o中生成abc个文件;仅当存在目录abc时。

当生成的目标文件的封闭目录不存在时,有没有办法让gcc创建目录?如果没有,那么最简单的方法是自动提前制作目录,尤其是对于Makefile?

2 个答案:

答案 0 :(得分:1)

this post开始,似乎无法从gcc创建目录。

对于makefile,我可以使用此代码段。

OBJDIR = obj
MODULES := src src2
...

OBJDIRS := $(patsubst %, $(OBJDIR)/%, $(MODULES))

build: $(OBJDIRS)
    echo $^

$(OBJDIRS):
    mkdir -p $@ 

make build将创建目录,并回显结果。

我们还可以在不调用make build的情况下自动创建目标文件。

PROG := hellomake
LD   := gcc
...
$(PROG): $(OBJDIRS) obj/src/hellofunc.o obj/src/hellomake.o
    $(LD) $(filter %.o, $^) -o $(PROG)

答案 1 :(得分:0)

我这样做的方法是找出路径是什么,然后为它们创建目录:

SOURCES:=$(shell find $(SRC)/ -type f -name '*.c') #Get all the c files

#Get the files they're gonna be compiled to
OBJECTS:=$(patsubst $(SRC)/%.c, $(OBJ)/%.o, $(SOURCES))

#Get just the paths so you can create them in advance
OBJDIRS:=$(dir $(OBJECTS))

#call mkdir with the directories (using a dummy var because too much 
#trouble to deal with priorities) someone could prob do better
#--parents ignores the repeated and already existing errors
DUMMY:=$(shell mkdir --parents $(OBJDIRS))

酱: https://www.gnu.org/software/make/manual/html_node/File-Name-Functions.html