make:自动执行目标

时间:2015-11-30 14:52:12

标签: makefile gnu-make

在我的项目中,我有一组从源代码构建的程序:

SRC_FILES = $(wildcard $(SRC_DIR)/*.cpp)
TARGETS   = $(patsubst $(SRC_DIR)/%.cpp,$(BIN_DIR)/%,$(SRC_FILES))

我的构建目标很简单,并且工作正常:

all: $(TARGETS)
    @echo "- Done target $@"

现在,我需要一个run目标,以便所有这些程序都可以根据请求从s​​hell运行。比如说,如果我有3个文件,我想让make自动运行:

>$ ./test1
>$ ./test2
>$ ./test3

或者

>$ ./test1 && ./test2 && ./test3

我试过了:

run: $(TARGETS)
   $(addsuffix && ,$(TARGETS))

生成以下命令:

./test1&& ./test2&&

但由于尾随&&

而失败

(当然,我希望这些可以自动生成,因为可以有3 ...或30。)

修改:实际上,&&分隔符不是必需的,所以像这样:

>$ ./test1; ./test2; ./test3;

也会没事的。

2 个答案:

答案 0 :(得分:2)

required_frame = driver.find_element_by_xpath('//iframe[@role="presentation"][@class="x-component x-window-item x-component-default"]') driver.switch_to_frame(required_frame) 附近有一些.PHONY行与

Makefile

你可能有

 .PHONY: all run

但这是一个肮脏的把戏。

也许你想将 run: $(TARGETS) $(addsuffix && ,$(TARGETS)) true 的输出产生到test2然后你可能

test2.out

答案 1 :(得分:1)

作为Basile Starynkevitch完全正确答案here的替代方案,还有(至少)两个其他选项。

你可以避免运行一个不必要的命令(虽然可能是内置的)来通过手动拉出第一个条目来结束列表(这实际上可能比内置的shell更昂贵)。

run: $(TARGETS)
        $< $(addprefix &&,$(wordlist 2,$(words $^),$^))

我认为一个更好的选择,假设用&&连接命令不是必需的,可以使用$(foreach)来生成要运行的命令。

run: $(TARGETS)
        $(foreach t,$^,$t;)

;中的尾随$(foreach)至关重要,因为;的输出是一行,您需要lib.theMenuMobile = HMENU lib.theMenuMobile { entryLevel = 0 excludeUidList = 2,3,5,6,7,48,49,53,54,55 1 = TMENU 1 { wrap = <ul>|</ul> expAll = 1 NO = 1 NO { wrapItemAndSub = <li class="uppermobilelink">|</li> stdWrap.htmlSpecialChars = 1 ATagTitle.field = title ATagBeforeWrap = 1 ATagParams = href="#" class="submenu-toggle mldisabled" linkWrap = |<i class="fa fa-plus"></i> } } 2 < .1 2.wrap = <ul class="submenu">|</ul> 2.NO { ATagTitle.field = subtitle ATagParams = href="#" class="submenu-toggle" linkWrap = |<i class="fa fa-plus"></i> wrapItemAndSub = <li>|</li> } 3 < .2 } 来终止每个shell命令(或者它)被视为一个带参数的长命令。)