我用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提供了未定义的引用。
当我直接给出
TARGET:
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.
答案 0 :(得分: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
或类似名称。