为什么生成文件找不到包含目录
Why can't Makefile find include directories
我似乎无法使用 Makefile 在我的测试程序中包含标头。
我尝试使用-I
尝试相对路径,但没有运气。我是 Make 的新手,由于某种原因,我很难理解它的用法。
我的代码,test.cpp
#include <iostream>
#include <results/enumTest.h>
int main()
{
return 0;
}
和我的制作文件:
CFLAGS = -Wall -g -Wextra -Wpedantic -std=gnu++11 -m64 -Iinclude
test: test.o
gcc $(CFLAGS) -I/.. -o test test.o
test.o: test.cpp
gcc $(CFLAGS) -I/.. -c test.cpp
我的目录结构:
/testDir/
./results/enuMtest.h
./test/test.cpp
./test/Makefile
我希望我可以使用 Makefile 编译并运行测试软件。这对我来说或多或少是一个教程。
您的包含路径-I/..
无效。您正在尝试访问根目录的父目录,该目录不存在。将生成文件更改为使用相对路径,而不是使用-I..
这将按预期访问父目录:
CFLAGS = -Wall -g -Wextra -Wpedantic -std=gnu++11 -m64 -Iinclude
test: test.o
g++ $(CFLAGS) -I.. -o test test.o # Change here
test.o: test.cpp
g++ $(CFLAGS) -I.. -c test.cpp # ...and here
请注意删除的斜杠。
编辑:正如@Lightness所评论的那样,您应该包含带有"header.h"
而不是<header.h>
的非系统标头。此外,由于您正在尝试编译C++程序,因此建议使用 g++
而不是 gcc
(我已经在上面的代码片段中更新了这一点(。
有几种可能的改进。
- 您尝试将包含路径设置为/的父目录,即/。
- 您尝试使用 gcc 而不是 g++ 编译 c++ 程序
- 链接时,您不需要(它仍然有效(设置包含路径。(测试:测试.o(
- 由于您指定的文件树中没有名为 include 的目录,因此您也不需要 CFLAGS 中的 -Iinclude
- 通常 CFLAGS 的C++变体名为 CXXFLAGS,但我在下面的修改示例中没有更改它。
更正后的生成文件将是:
CFLAGS = -Wall -g -Wextra -Wpedantic -std=gnu++11 -m64
test: test.o
g++ $(CFLAGS) -o test test.o
test.o: test.cpp
g++ $(CFLAGS) -I.. -c test.cpp
作为附加说明:
#include ""
而不是#include <>
也可以。不同之处在于,""
相对于当前源文件的位置搜索包含的文件,而<>
使用您使用 -I
指定的目录。在此处查找更多详细信息
相关文章:
- MAKE:找不到包含的用户定义的头文件?
- 配置:错误:找不到 MySQL 包含目录
- CMake 包支持 - 找不到包含和库
- 包含文件 <sched_yield.h>在我的 RHEL 5 上找不到
- 在包含中找不到 CMake 头文件
- 如何修复"QtCharts"库文件找不到/无法包含<QtCharts>?
- 为什么生成文件找不到包含目录
- 使用 vcpkg 的 CPPrestsdk,找不到包含文件
- CMake 编译器测试在 Android 中找不到包含目录
- SQL函数在包含后找不到
- NetBeans 说找不到包含文件 <conio.h>
- CMake 包含错误(找不到文件、未定义引用)
- 如何修复尝试包含预处理器找不到的文件的 Visual Studio 模板?
- VS 2017 找不到 DirectX 包含文件
- 在 Ubuntu 上编译 Protobuf 客户端代码,但找不到包含文件
- 尝试包含id3lib标头时出现找不到文件错误
- CMake 找到了 Boost,但 Make 找不到包含文件
- 尽管包含头文件,但仍找不到嵌套命名空间
- makefile 找不到来自 -I 包含路径的头文件
- MinGW g++ 在自己的包含目录中找不到标头