我似乎无法使用Makefile在测试程序中包含标头。
我尝试使用-I
来尝试相对路径,但运气不好。我是Make的新手,由于某种原因,我很难理解它的用法。
我的代码test.cpp
#include <iostream>
#include <results/enumTest.h>
int main()
{
return 0;
}
和我的Makefile:
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运行测试软件。这或多或少是我的教程。
答案 0 :(得分:6)
您的包含路径-I/..
无效。您正在尝试访问根目录的父目录,该目录不存在。将您的Makefile更改为使用相对路径,而不是-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
(我在上面的代码段中对此进行了更新)。
答案 1 :(得分:5)
可能有几处改进。
已更正的Makefile为:
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
指定的目录。
查找更多详细信息here