Makefile 找不到 .hpp
Makefile doesn't find .hpp
我的项目中有 2 个目录,一个叫做 Builds,它有 Makefile 和一个测试程序(test-P0-consola.cpp (,另一个叫做 P0 的目录,它组成了我使用的类,cadena(字符串(和 fecha(日期(。
test-P0-consola.cpp 包括它们,但 Make 找不到它们。
CPP = g++
CPPFLAGS = -std=c++14 -g -Wall -pedantic
VPATH = ../P0:.:..
test-consola: test-P0-consola.o fecha.o cadena.o
${CPP} ${CPPFLAGS} -o $@.ex $^
test-P0-consola.o: test-P0-consola.cpp fecha.hpp cadena.hpp
${CPP} -c ${CPPFLAGS} $< -o $@
fecha.o: fecha.hpp
cadena.o: cadena.hpp
当它尝试编译test-P0-consola.o时,它会抛出致命错误"cadena.hpp 不存在文件或目录",但是当我强制它编译 cadena 或 fecha 时,它会发现它们。我正在使用GCC和Ubuntu。
..
├── Builds
│ ├── makefile.mak
│ └── test-P0-consola.cpp
├── P0
│ ├── cadena.cpp
│ ├── cadena.hpp
│ ├── fecha.cpp
│ └── fecha.hpp
编辑
错误:
g++ -std=c++14 -g -Wall -pedantic -c test-P0-consola.cpp
test-P0-consola.cpp:7:21: fatal error: fecha.hpp: There is no file or directory
compilation terminated.
makefile.mak:9: Failure in the instructions for the objective 'test-P0-consola.o'
make: *** [test-P0-consola.o] Error 1
仔细看看你的错误:
test-P0-consola.cpp:7:21: fatal error: fecha.hpp: There is no file or directory
您可能有这样的内容:
// test-P0-consola.cpp
#include "fetcha.hpp"
但是fetcha.hpp
不在那个目录中,所以它找不到它。您需要更改直接包含文件的方式(通过 #include "../P0/fetcha.hpp"
(,或者更改构建规则以传入其他包含路径(通过 -I../P0
(。
注意:我不确定是否有理由将.
添加到VPATH
。这有点含蓄。
注2:这是一个坏主意:
test-consola: test-P0-consola.o fecha.o cadena.o
${CPP} ${CPPFLAGS} -o $@.ex $^
~~~~~
不要对Make撒谎。运行配方的结果应该是目标文件,但 PHONY 目标除外。这里的食谱应该是-o $@
.如果需要.ex
后缀,则应将目标更改为test-consola.ex
。如果仍希望将规则命名为 test-consola
,则需要:
test-consola : test-consola.ex
test-consola : .PHONY
您应该在生成文件中放置需要编译器使用的 .hpp 文件的包含路径。应使用 -Ipath
编译器指令,其中 path 是包含文件的路径。
请参阅"生成文件:如何正确包含头文件及其目录?
和
如何在生成文件中定义多个包含路径
像这样:
CPP = g++
CPPFLAGS = -std=c++14 -g -Wall -pedantic
INC = -Iyourincludebasepath/P0
VPATH = ../P0:.:..
test-consola: test-P0-consola.o fecha.o cadena.o
${CPP} ${CPPFLAGS} ${INC} -o $@.ex $^
test-P0-consola.o: test-P0-consola.cpp fecha.hpp cadena.hpp
${CPP} -c ${CPPFLAGS} ${INC} $< -o $@
fecha.o: fecha.hpp
cadena.o: cadena.hpp
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 致命错误:找不到'boost/uuid/uuid.hpp'文件
- 编译器找不到 SFML/Graphics.hpp,但它已添加到 includeirs 中
- 致命错误:找不到 SFML/System.hpp' 文件
- 使用 g++-8 编译时找不到 boost/asio/io_context.hpp
- Makefile 找不到 .hpp
- 警告:找不到编解码器参数(././modules/higgui/src/cap_ffmpeg_impl.hpp:540)
- Mac OSX:构建opencv_contrib致命错误:找不到文件 opencv2/core.hpp
- 找不到'boost/iostreams/device/file_descriptor.hpp'文件错误
- 使用 SCons 编译时找不到 glm.hpp
- g++/gcc 找不到名为 String.hpp 的头文件
- SCons 在使用嵌套目录时找不到"stdafx.hpp"
- 编译器似乎找不到boost/shared_ptr.hpp
- 在Xcode 5中找不到glm/glm.hpp文件
- 找不到openv相关的头文件stitch .hpp
- GCC编译器找不到hpp文件