0

2 つの異なる C++ ソース コードを含む 2 つの異なるディレクトリがあり、それぞれが異なるプログラムを実行します。ディレクトリには独自の Makefile があり、それぞれが特定の環境変数が設定されたスクリプトをビルドします。

ここで、両方のプログラム機能を利用する新しい C++ ソース コードを開発するために、両方の C++ ソース コードを混在させたいので、両方のディレクトリの内容を 1 つのディレクトリに配置します。

これまでのところ、すべてのファイルを 1 つのディレクトリに配置しました。対応する Makefile を配置すると、元のソース コードのそれぞれを正常にビルドできます。ここで、(Makefile を置き換えることなく) 元のソース コードのそれぞれをビルドできる単一の Makefile が必要です。これにより、新しい混合 C++ ソース ファイルをビルドできるようになることを願っています...

簡単な解決策を試し、両方の Makefile の内容を 1 つの Makefile に配置しましたが、うまくいきませんでした ...

2 つの Makefile を投稿すると便利だと思います

これが最初のものです

# 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

そして2番目の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

私は自分の質問に関連するすべてのスタックオーバーフローの質問をチェックし、私の唯一の最も近い状況は、(1つのディレクトリに複数のmakefiles)というタイトルの質問です;しかし、これはまさに私がやりたいことではありません...

どうもありがとう !

4

1 に答える 1

0

ソース ディレクトリをマージする理由は何ですか? 何らかの理由で分離されていると思います。代わりに、それらをそのままにして、その上のディレクトリに新しいmakeファイルを作成し、その下にある各サブmakeファイルを呼び出します-インクルードまたは各makefileへの直接シェルを介して。継承やその他の機能を「簡単に」取得するためだけにコードを混在させることはしません。

ところで、ここにあなたのためのリンクがあります:Stack Overflowはその方法を示しています

于 2013-02-09T00:39:25.150 に答える