【问题标题】:Move object files that require linking to specific subfolders移动需要链接到特定子文件夹的目标文件
【发布时间】:2014-10-29 19:22:24
【问题描述】:

所以我有一个必须在不同机器(solaris 和 unix)上编译的 makefile,所以我们需要为我们的目标文件创建不同的目录以进行创建。我碰壁了,因为我不太明白创建特定目标文件的语法,用 -c 链接,因为 make 不允许我这样做。这是迄今为止我在尝试创建程序应放置 .o 文件的不同目录并引用它们以在同一目录中构建库的过程中的一个 sn-p。

OBJDIR = objdir
OBJ = $($(OBJDIR)/$(OSDEF))

$(OBJDIR):
mkdir $(OBJDIR) \
mkdir $(OBJDIR)/sun4sol \
mkdir $(OBJDIR)/Linux

其中 OSDEF 是 sun4sol 或 linux。

libListCreation: list_adders.o list_movers.o list_removers.o
ar -crvs libList.a $(OBJ)/list_adders.o $(OBJ)/list_movers.o $(OBJ)/list_removers.o \
mv libList.a $(OBJ)/

list_removers.o: list.h list_removers.c
$(CC) $(CCFLAGS) -c list.h list_removers.c -I. -o $(OBJ)/$@

list_movers.o: list.h list_movers.c
$(CC) $(CCFLAGS) -c list.h list_movers.c -I. -o $(OBJ)/$@

list_adders.o: list.h list_adders.c
$(CC) $(CCFLAGS) -c list.h list_adders.c -I. -o $(OBJ)/$@

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    您的所有多行规则在 shell 命令之间都缺少;

    您可能应该为$(OBJ) 目录创建一个目标,而不是将其创建为$(OBJDIR) 的副作用(通常您不应为每个目标创建多个文件或目录)

    $(OBJDIR):
        mkdir $(OBJDIR)
    
    $(OBJ) : $(OBJDIR)
        mkdir $(OBJ)
    

    为什么你没有图书馆的目标,为什么你在一个地方创建图书馆然后移动它,而不是在正确的地方开始创建它?

    $(OBJ)/libList.a: $(OBJ)
        ar -crvs $@ $(OBJ)/list_adders.o $(OBJ)/list_movers.o $(OBJ)/list_removers.o
    

    您的makefile 规则声称创建list_xxx.o,但实际上创建$(OBJ)/list_xxx.o,这只会混淆make。不要那样做。目标应该是$(OBJ)/list_xxx.o

    你正在尝试编译头文件,不要那样做。

    $(OBJ)/list_removers.o: list.h list_removers.c $(OBJ)
        $(CC) $(CCFLAGS) -c list_removers.c -I. -o $@
    

    【讨论】:

    • 感谢您的帮助!绝对在这里做了诀窍,现在我只是想理解 mkdir 命令!我对第二个 $(OBJ) 命令只有分号之间的空格感到困惑。这是一个错字还是有不同的语法?我对 makefile 还很陌生,因此非常感谢所有这些帮助!
    • 另外,我还有一个问题;如果有人只想从 make 运行 libList,那该怎么做?我试过这样运行,我假设我必须指定像make odjdir/Linux/libList.a这样的目录?
    • 那里的空格被忽略,没有区别。是的,这就是制作库的方法,或者你可以添加一个依赖它的目标(例如libList: $(OBJ)/libList.a)这样你就可以说make libList
    猜你喜欢
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    相关资源
    最近更新 更多