我正在嘗試遵循并將 [this][1] Googletest 教程轉換為在 Windows 中作業并使用 Make 進行構建。我也在嘗試添加一個更典型的目錄結構。[1]:https://www.eriksmistad.no/getting-started-with-google-test-on-ubuntu/
我的目錄結構:
D:.
│ makefile
│
├───bin
├───inc
│ whattotest.h
│
├───obj
├───src
│ whattotest.cpp
│
└───tests
tests.cpp
whattotest.h
#pragma once
double squareRoot(const double a);
whattotest.cpp
#include <math.h>
#include "whattotest.h"
double squareRoot(const double a) {
double b = sqrt(a);
if(b != b) { // nan check
return -1.0;
}else{
return sqrt(a);
}
}
測驗.cpp
#include "whattotest.h"
#include <gtest/gtest.h>
TEST(SquareRootTest, PositiveNos) {
ASSERT_EQ(6, squareRoot(36.0));
ASSERT_EQ(18.0, squareRoot(324.0));
ASSERT_EQ(25.4, squareRoot(645.16));
ASSERT_EQ(0, squareRoot(0.0));
}
TEST(SquareRootTest, NegativeNos) {
ASSERT_EQ(-1.0, squareRoot(-15.0));
ASSERT_EQ(-1.0, squareRoot(-0.2));
}
int main(int argc, char **argv) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
生成檔案
CXX = g
OBJ = obj
SRC = src
TESTS = tests
INC = inc
BIN = bin
LIBS= -lpthread
GTEST=D:\myWorkspace\Gtest\googletest-release-1.11.0\googletest\include\
LIBGTEST=D:\myWorkspace\Gtest\googletest-release-1.11.0\lib\libgtest.a
.PHONY : all
all: $(BIN)/runTests
$(BIN)/runTests: $(OBJ)/tests.o $(OBJ)/whattotest.o $(LIBGTEST)
#g -o runTests obj/tests.o obj/whattotest.o <path to libgtest.a> -pthread
$(CXX) -o $@ $^ $(LIBS)
$(OBJ)/tests.o: $(TESTS)/tests.cpp
#g -I <path to gtest> -I inc -c tests.cpp -o tests.o
$(CXX) -I $(GTEST) -I $(INC) -c $< -o $@
$(OBJ)/whattotest.o: $(SRC)/whattotest.cpp
$(CXX) -I $(INC) -c $< -o $@
clean:
-rm $(OBJ)/*.o
-rm $(BIN)/*.exe
當我運行它時,我收到以下錯誤:
g -I D:\myWorkspace\Gtest\googletest-release-1.11.0\googletest\include LIBGTEST=D:\myWorkspace\Gtest\googletest-release-1.11.0\lib\libgtest.a -I inc -c tests/tests.cpp -o obj/tests.o
g : warning: LIBGTEST=D:\myWorkspace\Gtest\googletest-release-1.11.0\lib\libgtest.a: linker input file unused because linking not done
g : error: LIBGTEST=D:\myWorkspace\Gtest\googletest-release-1.11.0\lib\libgtest.a: linker input file not found: Invalid argument
make: *** [makefile:19: obj/tests.o] Error 1
我認為這將運行的方式是讓 Make 查看 runTests 的規則需要 tests.o,它不存在,然后下拉并使用規則來創建該目標檔案。之后,回傳到 runTests 的規則并完成。
輸出看起來像 Make 正在將這兩個規則組合在一起,形成某種合并,并結合了 -c 和 .cpp 檔案。我認為這是導致此錯誤發生的原因。
我對Make為什么這樣做感到困惑。
uj5u.com熱心網友回復:
檢查這個:
GTEST=D:\myWorkspace\Gtest\googletest-release-1.11.0\googletest\include\
LIBGTEST=D:\myWorkspace\Gtest\googletest-release-1.11.0\lib\libgtest.a
通過在變數賦值的末尾有一個反斜杠,GTEST您將該行繼續到下一行,因此也GTEST包含下一行的變數賦值(并且LIBGTEST未設定)。
你基本上寫了這個:
GTEST=D:\myWorkspace\Gtest\googletest-release-1.11.0\googletest\include LIBGTEST=D:\myWorkspace\Gtest\googletest-release-1.11.0\lib\libgtest.a
通常,您不應該在 makefile 中使用反斜杠。您應該使用正斜杠作為目錄分隔符。
如果您確實想至少使用反斜杠,則不應在變數賦值的末尾添加它們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/510434.html
標籤:视窗生成文件谷歌测试
