代码之家  ›  专栏  ›  技术社区  ›  OneRaynyDay

规则和配方中的makefile匹配模式

  •  -1
  • OneRaynyDay  · 技术社区  · 8 年前

    我的makefile中出现了一个测试模式。我知道模式匹配器 % $< . 我正在尝试编译一些C++。

    我有一个makefile的片段,看起来像:

    diff-test: main-test.o diff.o test/diff-test.cpp 
        $(CC) $(FLAGS) $(BOOST_LINK_FLAGS) build/main-test.o build/diff.o test/diff-test.cpp -o build/diff-test
        build/diff-test
    
    walk-test: main-test.o walk.o test/walk-test.cpp
        $(CC) $(FLAGS) $(BOOST_LINK_FLAGS) build/main-test.o build/%.o test/%-test.cpp -o build/%-test
        build/walk-test
    

    我试着做了如下的事情:

    %-test: main-test.o %.o test/%-test.cpp 
        $(CC) $(FLAGS) $(BOOST_LINK_FLAGS) build/main-test.o build/$<.o test/$<-test.cpp -o build/$<-test
        build/$<-test
    

    但这与我想要的测试不符:

    make diff-test
    make: *** No rule to make target `diff-test'.  Stop.
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   MadScientist    8 年前

    我想你不想 $< . 这扩展到第一个先决条件,在本例中是 main-test.o 也就是说你要建造 build/main-test.o-test 使用 main-test.o.o test/main-test.o-test.cpp 这似乎不大可能。

    你可能是说 $* 相反。

    但是,不能在先决条件列表中使用自动变量:它们仅在配方本身中定义。

    为什么不使用先决条件列表中的模式;这就是模式规则的工作原理:

    %-test: %.o test/%-test.cpp main-test.o
            $(CC) $(FLAGS) $(BOOST_LINK_FLAGS) $^ -o build/$*-test
            build/$*-test
    
    推荐文章