【问题标题】:Create directories when generating object files in gcc在 gcc 中生成目标文件时创建目录
【发布时间】:2015-03-07 20:22:27
【问题描述】:

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

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

【问题讨论】:

  • 为什么不在调用 gcc 的同一目标中简单地调用 mkdir abc -p
  • @Sebastian Stigler:我可以,我可能会想出一些脚本来自动执行此操作,我只是想确定我是否错过了更简单的方法。

标签: gcc makefile


【解决方案1】:

来自this post,似乎无法从gcc 创建目录。

对于makefile,我可以使用这段代码sn-p。

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)

【讨论】:

    【解决方案2】:

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

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      相关资源
      最近更新 更多