如何将两个Makefile(每个生成的脚本都设置了特定的环境变量)合并到一个Makefile中

How to merge two Makefiles (each builds scripts with certain environment variables set) into a single Makefile?

本文关键字:Makefile 环境变量 合并 一个 设置 两个 脚本      更新时间:2023-10-16

我有两个不同的目录,其中包含两个不同C++源代码,每个源代码执行不同的程序。目录有自己的Makefile,每个目录都使用特定的环境变量集构建脚本。

现在,我想把两个目录的内容放在一个目录中,因为我想混合两个C++源代码,以便开发一个利用这两个程序功能的新C++源代码。

到目前为止,我将所有文件都放在一个目录中,当我放置相应的Makefile时,我可以成功地构建每个原始源代码。现在,我想要一个单独的Makefile,它允许我构建每个原始源代码(而不替换Makefile),希望这能让我构建新的混合C++源文件。。。

我尝试了一个琐碎的解决方案,并将两个Makefile的内容放在一个Makefile中,但这不起作用。。。

我认为这是有用的张贴我的两个Makefiles

这是第一个

# A simple $(MAKE)file to cause make to go look in the top directory. A simple
# convenience.
all: lib 
    $(MAKE) -C .. examples
lib:
    $(MAKE) -C .. lib/libAria.so
%.so: ../lib/libAria.so %.cpp 
    $(MAKE) -C .. examples/$@
%: ../lib/libAria.so %.cpp 
    $(MAKE) -C .. examples/$@
%Static: ../lib/libAria.a %.cpp 
    $(MAKE) -C .. examples/$@
clean: 
    $(MAKE) -C .. cleanExamples
../lib/libAria.so: FORCE
    $(MAKE) -C .. dirs lib/libAria.so
../lib/libAria.a: FORCE 
    $(MAKE) -C .. dirs lib/libAria.a
FORCE:
.PHONY: all FORCE clean lib

第二个Makefile是

LDLIBS = -lm 
CXXFLAGS = -O3 -finline-functions -I. -I./qpoases/INCLUDE -I./qpoases/SRC
CFLAGS = -O3
CC     = g++
OBJECTS = 
    ./qpoases/SRC/QProblemB.o       
    ./qpoases/SRC/Bounds.o          
    ./qpoases/SRC/Constraints.o     
    ./qpoases/SRC/SubjectTo.o       
    ./qpoases/SRC/Indexlist.o       
    ./qpoases/SRC/CyclingManager.o  
    ./qpoases/SRC/Utils.o           
    ./qpoases/SRC/MessageHandling.o 
    ./qpoases/solver.o              
    integrator.o                    
    condensing.o                    
    gauss_newton_method.o 
.PHONY: all
all: test libacado_exported_rti.a
test: ${OBJECTS} test.o
./qpoases/solver.o    : ./qpoases/solver.hpp
integrator.o          : acado.h
condensing.o          : acado.h
gauss_newton_method.o : acado.h   ./qpoases/solver.hpp
test.o                : acado.h   ./qpoases/solver.hpp
libacado_exported_rti.a: ${OBJECTS}
    ar r $@ $?
${OBJECTS} : ./qpoases/solver.hpp
.PHONY : clean
clean :
    -rm -f *.o *.a ./qpoases/SRC/*.o ./qpoases/SRC/*.a test

我检查了所有与我的问题相关的stackoverflow问题,唯一最接近我的情况是一个标题为(一个目录中有多个makefile)的问题;然而,这并不是我想要做的…

非常感谢!

为什么要合并源目录?我想他们分开是有原因的。相反,我会让它们保持原样,并在它们上面的目录中创建一个新的make文件,该文件调用它下面的每个sub-make文件——通过include或直接对每个makefile进行炮击。我不会仅仅为了让继承或其他工作变得"更容易"而混合代码。

顺便说一句,这里有一个链接:Stack Overflow向您展示了