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手册,找不到任何可供参考的内容。
答案 0 :(得分:4)
这是一种静态模式规则。第一部分(从左到第一个冒号)是一个目标列表。第二部分定义了与每个目标匹配的模式。然后可以在列出先决条件的第三部分(右侧第二个冒号)中使用(或不使用)匹配的%
词干。在您的示例中,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将不会检查它们是否是最近的或不是目标。
另请注意,由于$*
自动变量,匹配的词干也可以在配方中引用。