1

私のビルドシステムには次のシナリオがあります。

1. src ディレクトリ内の 1000 個の makefile
2. 1000 個のすべての makefile に含まれる common.make ファイルがあります
3. ソース ディレクトリからオブジェクト ディレクトリ内の makefile とソースのリンクが作成されました。したがって、makefile 内のすべての makefile とさらに多くのスクリプトは、ビルド ディレクトリに存在するような方法で記述されます。 
4. obj ディレクトリは動的な場所です。
5. これで、すべてのリンクを削除しました。オブジェクト ディレクトリにリンクがなくなりました。
6. 実行前にオブジェクト ディレクトリ (動的ディレクトリ名) を変更する予定のソース ディレクトリ内のすべてのメイクファイルを実行したいと考えています。(変更するディレクトリがわからないため、ここでは make -C を使用できません)。ソースを見つけるために VPATH を設定できます。
7. common.make を使ってディレクトリを動的に変更したいのですが、common.make で行った cd, $(shell cd ...) がメインの Makefile に反映されません。
8. これを行わないと、1000 個のメイクファイルすべてを変更することになります。私はこれをしたくありません。

最善の方法を教えてください。簡単に言えば、1000 個のメイクファイルを実行する前に (common.make を介して) ディレクトリを変更したいのですが、 

common.make が次のことを行うことを期待しています。

1) srcpath = 現在のパスを保存します (現在のパスはソース ディレクトリです)
2) 出力ディレクトリに変更します (ディレクトリ名はここでは動的です)。
3) VPATH=srcpath を設定します。 
4) これで、ソース ディレクトリ内のすべての makefile で common.make を使用してコンパイルし、バイナリとオブジェクトを出力ディレクトリに格納できます。

# これはサンプルの Makefile の 1 つです。このファイルを短縮しました。すべてのメイクファイルが、SRCS、CMDSRCS などの同じ名前を使用しているわけではありません。それは違うでしょう。
# これは既存のメイクファイルです。ソースの場所 /home/user/project/src/mod1/lib/resmgr>make BD=100.
# /home/user/project/build/swout100/mod1/lib/resmgr/*への出力が必要です 。common.make (共通メイク) は、ここで引数 BD を検証する場合があります。BD=101 は使用できません。
# ユーザーに強制的に make -C /home/user/project/build/swout100/mod1/lib/resmgr を実行させることができます (ここでは BD 検証は行われません。ユーザーは移動先のディレクトリを知っている必要があります)。 
# common.make はユーティリティ makefile
TOPDIR = ../../..
MAKEDIR = $(TOPDIR)/makeとしてユーザーを助けると思います
include $(MAKEDIR)/common.make # ほとんどのメイクファイルに含まれています。これは、一般的なメイクファイルとして扱うことができます。common.make の インクルード
を           変​​更することを考え
まし た
....... o) CMDHNDLR = resmgrcmd #... ここに CFLAGS とここにライブラリ フラグ MDSRC = main.c SRCS = resmgr.c \ # ここにその他のソース ファイル HDRS = resmgr.h MDOBJ = $(MDSRC:.c=.o) OBJS = $(SRCS:.c=.o) $(OBJS) $(MDOBJ) $(CMDOBJS): $(HDRS) DEPENDSRCS = $(MDSRC) $(SRCS) $(CMDRCS)













ST_LIBS = $(DEVOSLIBSRC)/apixdr/libapixdr.a
$(TARGET): $(MDOBJ) $(OBJS)
    $(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS) $(ST_LIBS)
$(CMDHNDLR ): $(CMDOBJS)
    $(CC) $(LDFLAGS) -o $@ $^ $(DEVOSLIBS) $(IPCLIB) $(KILIB) $(MIAUXLIB) \
            $(RESMGRLIB) $(RBACLIB)
インストール:: インストール-サーバー
インストール サーバー: $(TARGET) $(TARGET).options $(DEVOSSBINDIR) $(DEVOSCONFDIR)
    $(INSTALL) -m 755 $(TARGET) $(DEVOSSBINDIR)
インストール コマンド: $(DEVOSBINDIR)/$(CMDHNDLR ) \
    install-admin-cmds install-user-cmds
clean::
    $(RM) $(OBJS) $(TARGET) $(SCRIPTS) $(RAWMAN) $(CMDHNDLR) $(ZIPMAN)

4

1 に答える 1