0

我使用 vpath 编写了简单的 makefile

COMMON_CFLAGS = -Wall -O2 -DA2CSCC=0
CFLAGS = $(COMMON_CFLAGS) -I/usr/include/ -I./ -std=gnu99 -g

VPATH = ./test_app

CC: LD_LIBRARY_PATH=./libs gcc

SRC: test.c

all: TARGET

TARGET:
      $(CC) $(CFLAGS) $(SRC) -o test

它给main提供了未定义的引用。

当我直接给

目标:

       gcc test.c -o test
gcc  test.c TARGET
gcc: error: test.c: No such file or directory
gcc: error: TARGET: No such file or directory
gcc: fatal error: no input files
compilation terminated.
4

1 回答 1

3

make 不会通过您的命令并用基于 VPATH 的新版本替换任意字符串。如果要使用 VPATH,则必须使用自动变量。只有自动变量会被重置。

这在 GNU make 手册中都有相当清楚的解释:http ://www.gnu.org/software/make/manual/html_node/Recipes_002fSearch.html

您的 makefile 中还有其他各种问题。像这样改变你的规则:

all: test

test: $(SRC)
      $(CC) $(CFLAGS) $^ -o $@

请注意:创建一个名为的程序test绝不一个好主意。那是一个内置的shell,也是一个程序/usr/bin,它只会导致混乱。使用其他名称,例如mytest或类似名称。

于 2013-09-11T13:14:23.067 回答