1. ホーム
  2. linux

[解決済み】makefileでターゲットを強制的にリビルドするには?

2022-04-07 18:28:13

質問

ビルドした後、別のmakefileを呼び出すmakefileがあります。このmakefileは作業を行うmakefileをさらに呼び出すので、実際には変更されません。したがって、プロジェクトはビルドされ、最新であると考え続けています。

dnetdev11 ~ # make
make: `release' is up to date.

makefile に強制的にターゲットをリビルドさせるには?

clean = $(MAKE) -f ~/xxx/xxx_compile.workspace.mak clean


build = svn up ~/xxx                                                       \
        $(clean)                                                                \
        ~/cbp2mak/cbp2mak -C ~/xxx ~/xxx/xxx_compile.workspace        \
        $(MAKE) -f ~/xxx/xxx_compile.workspace.mak $(1)                    \


release:
        $(build )

debug:
        $(build DEBUG=1)

clean:
        $(clean)

install:
        cp ~/xxx/source/xxx_utility/release/xxx_util /usr/local/bin
        cp ~/xxx/source/xxx_utility/release/xxxcore.so /usr/local/lib

注:罪のない人々を守るため、名前を削除しました

最終修正版。

clean = $(MAKE) -f xxx_compile.workspace.mak clean;


build = svn up;                                         \
        $(clean)                                        \
        ./cbp2mak/cbp2mak -C . xxx_compile.workspace;   \
        $(MAKE) -f xxx_compile.workspace.mak    $(1);   \


.PHONY: release debug clean install

release:
        $(call build,)

debug:
        $(call build,DEBUG=1)

clean:
        $(clean)

install:
        cp ./source/xxx_utillity/release/xxx_util /usr/bin
        cp ./dlls/Release/xxxcore.so /usr/lib

解決方法は?

ターゲットの1つまたは複数を宣言して インチキ .

ニセのターゲットとは、実際にはファイル名ではないものです。 は、明示的に実行されるレシピの名前に過ぎません。 を要求します。ニセモノのターゲットを使用する理由は2つあります。 同名のファイルとの衝突を防ぎ、パフォーマンスを向上させる。

...

ニセのターゲットは、本物のターゲットファイルの前提条件であってはなりません。 である場合、make がそのレシピを更新するたびに実行されます。 ファイルを作成します。ニセモノのターゲットが本当の の場合のみ、ニセターゲットのレシピが実行されます。 ターゲットが指定されたゴール