簡體   English   中英

make:分層的make文件

[英]make: hierarchical make file

(免責聲明:我習慣過騙人……我對make毫無經驗)

上下文:我正在使用生成生成文件的Eclipse CDT。

假設我有一個項目目錄“ lib”,還有兩個構建配置“ Debug”和“ Release”。 Eclipse CDT為每個構建配置優雅地生成一個makefile。 所述makefile文件最終位於“ Debug”和“ Release”文件夾中。

現在,我想做的是在文件夾“ lib”中有一個makefile,該文件將makefile 稱為 “ Debug / makefile”和“ Release / makefile”。

我怎么做?

我希望能夠在文件夾“ lib”中啟動“ make”,並且將使用指定的目標調用這兩種配置。

解決方案基於這里收集的所有寶貴意見,我設計了以下內容:

MAKE=make
BUILDS=Release Debug
TARGETS=all clean

$(TARGETS):
    @for b in $(BUILDS) ; do $(MAKE) -C $$b $@ ; done

$(BUILDS):
    @for t in $(TARGETS) ; do $(MAKE) -C $@ $$t ; done

%:
    @for b in $(BUILDS) ; do $(MAKE) -C $$b $@ ; done

取決於什么是“通話”。 你想

include $(BUILD)/Makefile

要么

$(MAKE) -C $(BUILD) $@

或類似的東西。 我猜你想要后者。 也許像

release debug:
    $(MAKE) -C $@

你明白了。

更多示例:

BUILDS=release debug
TARGETS=all clean

$(TARGETS):
    for b in $(BUILDS) ; do $(MAKE) -C $$b $@ ; done

$(BUILDS):
    for t in $(TARGETS) ; do $(MAKE) -C $@ $$t ; done

由於您提到“指定的目標”,因此我建議:

%:
    $(MAKE) -C Debug $@
    $(MAKE) -C Release $@

如果太籠統,可以用$(TARGETS)替換%,其中TARGETS是您定義的東西,列出所有您想使用的東西。

all: release debug

release:
   $(MAKE) -C ../Release

debug:
   $(MAKE) -C ../Debug

我假設他們都在同一水平上。 該路徑必須來自您調用Make的位置。

具有在兩個目錄中調用makefile的不同目標。

all: debug product

debug:
        $(MAKE) -f debug/Makefile

product:
        $(MAKE) -f product/Makefile

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM