C 具有多个子模块的Makefile
我的课程结构如下:C 具有多个子模块的Makefile,c,makefile,C,Makefile,我的课程结构如下: main.c Makefile Submodule --{somefiles} --Makefile 子模块正在创建库子模块.a。它有许多源文件,需要一些库 我只想知道 子模块中的Makefile知道如何制作子模块。a 子模块中的Makefile设置变量submodule\u LDFLAGS和submodule\u LDLIBS 如何在根项目目录中写入Makefile: 它将在子模块中使用Makefile创建子模块 它会将SUBMODULE\u LDFLAGS和SUBMOD
main.c
Makefile
Submodule
--{somefiles}
--Makefile
子模块正在创建库子模块.a
。它有许多源文件,需要一些库
我只想知道
Makefile
知道如何制作子模块。a
Makefile
设置变量submodule\u LDFLAGS
和submodule\u LDLIBS
Makefile
:
子模块
SUBMODULE\u LDFLAGS
和SUBMODULE\u LDLIBS
添加到自己的变量中吗Makefile
中的以下命令正常工作:
TARGET = MyProgram
OBJS = $(TARGET).o submodule/submodule.a
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@ $(LDLIBS)
现在它创建了MyProgram.o
,但无法创建MyProgram
,因为Makefile
不知道如何创建子模块/submodule.a
我可以添加行:
submodule/submodule.a:
make -C submodule
但是它不能帮助我处理丢失的库。子Make无法直接将变量传递给父进程。有(至少)两种间接方式 您可以让子Make编写一个包含变量值的文件,然后父Make可以读取该文件 您可以复制构成这些变量的
子模块/Makefile
部分,并将其放入Makefile
中。更好的是,您可以将该代码隔离在一个单独的文件中,然后这两个makefile将包括在内
编辑:
递归Make的一个缺点是它会中断Make的大部分依赖处理。在这种情况下,当且仅当库的一个源发生更改时,没有干净的方法让子make运行
您可以将子模块源的列表(或构成该列表的代码)放在一个单独的文件中,这两个makefile将包括在其中。然后这些文件可以是$(TARGET)
的先决条件之一
或者,您可以将子模块/submodule.a
作为虚假目标。在这种情况下,Make每次都会重新生成二进制文件,但在其他情况下它会工作得很好。能否修改子模块/Makefile
?关于生成子模块.a的指令如何?对子模块.a
源代码进行任何更改后,我的解决方案将不会重新生成子模块.a
。@Ari:这不是你的问题,但很容易解决。你对我关于变量的回答满意吗?部分满意,但似乎没有更好的解决方案,而且这个解决方案有效。