c++ - Makefile 缺少包含路径 虽然路径存在并已定义
问题描述
我有 make 文件,我尝试将它们设为通用,但它不断补充它缺少包含目录,这是 makefile:
CXX=g++
CPPFAGS= -Wall -O0 -g -std=c++14
INCLUDES = -I/home/vagrant/libuv/include -Isrc
LIBS_DIRS = -L/home/vagrant/libuv/build
LDFLAGS= -lssl -lcrypto
LIB_STATIC = -Wl,--no-as-needed -Bstatic -luv_a -ldl -lpthread
SOURCE = $(wildcard echo.cpp) \
$(wildcard src/*.cpp)
OBJ = $(SOURCE:.cpp=.o)
DEP = $(OBJ:.o=.d)
TARGET = myproj
$(TARGET) : $(OBJ)
$(CXX) $(CPPFLAGS) $(INCLUDES) -o $@ $^ $(LIBS_DIRS) $(LDFLAGS) $(LIB_STATIC)
all: $(TARGET)
clean:
rm -f $(OBJ) $(TARGET)
cleandep:
rm -f $(DEP)
.PHONY:all clean cleandep
当我制作:制作-n:
make -n
g++ -c -o echo.o echo.cpp
g++ -c -o src/base64.o src/base64.cpp
g++ -c -o src/Server.o src/Server.cpp
g++ -c -o src/sha1.o src/sha1.cpp
g++ -c -o src/Client.o src/Client.cpp
g++ -I/home/vagrant/libuv/include -Isrc -o myproj echo.o src/base64.o src/Server.o src/sha1.o src/Client.o -L/home/vagrant/libuv/build -lssl -lcrypto -Wl,--no-as-needed -Bstatic -luv_a -ldl -lpthread
当我调用 make 时,我收到此错误:
make
g++ -c -o echo.o echo.cpp
In file included from src/Server.h:9:0,
from echo.cpp:1:
src/Client.h:6:10: fatal error: uv.h: No such file or directory
#include <uv.h>
^~~~~~
compilation terminated.
make: *** [echo.o] Error 1
但 uv 确实存在于:/home/vagrant/libuv/include
解决方案
您没有规则来构建您的目标文件:您只定义了一个规则来将您的目标文件链接到最终的可执行文件中。如评论中所述,添加$(INCLUDES)
到该配方中是没有用的,因为头文件目录仅在编译(创建目标文件)而不是链接(将目标文件和库转换为可执行文件)期间使用。
因为您还没有定义自己的规则来构建目标文件,所以您使用的是 make 的内置规则。但是 make 的内置规则对名为 的变量一无所知INCLUDES
,因此在编译期间不会使用该变量。您可以通过查看 make 生成的编译器命令轻松看到这一点。
您需要 (a) 创建自己的规则来编译使用您的个人 make 变量的目标文件,或者 (b) 使用make 期望与其内置规则一起使用的普通内置变量。
对于(b),如手册中所述,您应该获取当前CPPFAGS
[sic] 变量并将其重命名为CXXFLAGS
,获取当前INCLUDES
变量并重命名它CPPFLAGS
,获取当前LIBS_DIRS
变量并重命名它LDFLAGS
,然后获取当前LDFLAGS
变量并将其重命名为LDLIBS
.
还要注意,您有DEPS
等,但是您的 makefile 中没有任何内容可以对它们进行任何操作或创建它们,因此它们无用。
推荐阅读
- python - Python gui(pyautogui) 函数抛出类型错误,可能是什么问题?
- go - 如何在本地环境中从 GCP 的 Secret Manager 获取秘密?
- javascript - react中根据id更新子类元素
- asp.net-core - 无法从根提供程序解析范围服务 dbcontext
- android - 如何获取应用程序的未读计数作为 int
- c# - 使用 API 的 Xamarin 表单有时会返回不完整的 JSON
- kotlin - Kotlin 简单泛型函数编译错误 (*)
- html - 如何在表单中对齐 HTML
- apache-flink - 如果我们将一个返回布尔值的函数传递到 Flink CEP 的 where 子句中,它会以分布式方式工作吗?
- java - 登录在带有 Thymeleaf 的 Spring MVC 中不起作用