我正在尝试使用Google测试框架:https://github.com/google/googletest/tree/master/googletest。
我有4个文件:
factorial.cpp:
#include "factorial.h"
int factorial(int n) { [some code here] }
facotrial.h:
int factorial(int n);
test_factorial.cpp
#include "gtest/gtest.h"
#include "factorial.h"
[some tests here]
gtest_main.cpp:
#include <stdio.h>
#include "gtest/gtest.h"
GTEST_API_ int main(int argc, char **argv) {
printf("Running main() from gtest_main.cc\n");
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
我还有一个makefile,其中包含(除其他外):
INCLUDES = -I/home/my_username/Documents/gtest/googletest/googletest/include
[...]
$(MAIN): $(OBJS)
$(CC) $(CFLAGS) $(INCLUDES) -o $(MAIN) $(OBJS) $(LFLAGS) $(LIBS)
在终端中写make
后,我得到:
test_factorial.cpp:1:25: fatal error: gtest/gtest.h: No such file or directory
compilation terminated.
makefile:27: recipe for target 'test_factorial.o' failed
问题是什么?
在googletest的README文件中,他们说:
g++ -isystem ${GTEST_DIR}/include -pthread path/to/your_test.cc libgtest.a \
-o your_test
所以这里-isystem
代替-I
,但我也遇到了-isystem问题。
答案 0 :(得分:0)
您已将您的包含添加到链接命令,但未添加到编译命令。这条规则:
$(MAIN): $(OBJS)
$(CC) $(CFLAGS) $(INCLUDES) -o $(MAIN) $(OBJS) $(LFLAGS) $(LIBS)
告诉如何从目标文件链接主程序。此规则不用于编译目标文件:假设您的[...]
没有编译规则,那么您使用的内置编译器规则并不适用了解INCLUDES
变量。
如果您在向test_factorial.cpp
收到错误时向我们展示了编译命令make print,那么很明显该标志丢失了。
如果你不构成自己的变量来保存这些标志,而是使用CPPFLAGS
变量作为C预处理器标志的标准变量,如-I
,它就可以正常工作。
CPPFLAGS = -I/home/my_username/Documents/gtest/googletest/googletest/include
它可能会起作用。