我编写了以下Makefile(它确实可以正常工作):
CXX2 = clang++
CXXFLAG2 = -std=c++11 -c -g -O0 -Wall -Wextra
LD2 = clang++
LDFLAG2 = -std=c++11
testing: data_test.o test_main.o dataframe.o csvreader.o course.o
$(LD2) $^ $(LDFLAG2) -o $@
data_test.o: test/data_test.cpp
$(CXX2) $< $(CXXFLAG2)
test_main.o: test/test_main.cpp
$(CXX2) $< $(CXXFLAG2)
dataframe.o: src/DataFrame.cpp src/CSVReader.cpp src/Course.cpp
$(CXX2) $< $(CXXFLAG2)
在我的test_main.cpp
文件中,只有以下几行:
#define CATCH_CONFIG_MAIN
#include "catch.hpp"
我尝试查看我的Makefile中是否可以替换测试规则,如下所示:
data_test.o: test/data_test.cpp test/test_main.cpp
$(CXX2) $< $(CXXFLAG2)
但是,我得到一个"_main", referenced from: implicit entry/start for main executable
错误。在我看来,将其test_main.cpp
作为实际测试的依赖项似乎应该可以正常工作。为什么有这个主文件需要编译为自己的.o
文件的原因?
从制造手册中:
$ <
第一个必备项的名称。如果目标从隐式规则获取其配方,这将是隐式规则添加的第一个前提条件(请参阅隐式规则)。
因此,下面的规则可以编译,data_test.cpp
而不能编译test_main.cpp
:
data_test.o: test/data_test.cpp test/test_main.cpp
$(CXX2) $< $(CXXFLAG2)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句