gpt4 book ai didi

makefile - 先决条件中的冒号,怎么理解?

转载 作者:行者123 更新时间:2023-12-03 02:52:48 25 4
gpt4 key购买 nike

以下是 Caffe 的片段的Makefile

TEST_BIN_DIR = build/test
$(TEST_CXX_BINS): $(TEST_BIN_DIR)/%.testbin: $(TEST_CXX_BUILD_DIR)/%.o $(GTEST_OBJ) | $(DYNAMIC_NAME) $(TEST_BIN_DIR)
@ echo LD $<
$(Q)$(CXX) $(TEST_MAIN_SRC) $< $(GTEST_OBJ) \
-o $@ $(LINKFLAGS) $(LDFLAGS) -l$(LIBRARY_NAME) -Wl,-rpath,$(ORIGIN)/../lib

TEST_CXX_BINS 的先决条件中的冒号 (:) 的含义是什么?它是否在先决条件中定义了另一个规则?

这不是标准的隐式规则或模式规则。我查遍了网络和GNU Make手册,没有找到任何可以引用的东西。

最佳答案

这是一个静态模式规则。第一部分(左边到第一个冒号)是目标列表。第二部分定义了与每个目标匹配的模式。然后可以在列出先决条件的第三部分(第二个冒号右侧)中使用(或不使用)匹配的 % 词干。在您的示例中 TEST_CXX_BINS 应该是目标列表。如果这些目标之一是 $(TEST_BIN_DIR)/foo.testbin (build/test/foo.testbin),那么以下规则将用于它:

$(TEST_BIN_DIR)/foo.testbin: $(TEST_CXX_BUILD_DIR)/foo.o $(GTEST_OBJ) | $(DYNAMIC_NAME) $(TEST_BIN_DIR)
@ echo LD $<
$(Q)$(CXX) $(TEST_MAIN_SRC) $< $(GTEST_OBJ) \
-o $@ $(LINKFLAGS) $(LDFLAGS) -l$(LIBRARY_NAME) -Wl,-rpath,$(ORIGIN)/../lib

注意,|之后的先决条件是有序先决条件:它们必须存在,如果不存在则创建,但如果存在,make将不会检查它们是否更存在最近或不超过目标。

另请注意,由于 $* 自动变量,匹配的词干也可以在配方中引用。

关于makefile - 先决条件中的冒号,怎么理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36718945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com