在家庭系统上安装 gtest 时出错

Error with gtest installation on home system

我正在尝试以与我学校的计算机相同的方式设置我的家庭计算机,以便我可以在这里完成我的作业,但我无法让 gtest 正常工作。我已经 运行 完成了推荐的安装过程,发现它需要“.so”库才能不抛出 'pthread' 未找到错误。

生成文件:

PROJECT_DIR = Electra
PROGRAM_TEST = testProject

CXX = g++
CXXFLAGS = -std=c++11 -g -fprofile-arcs -ftest-coverage

LINKFLAGS = -lgtest

SRC_DIR = src

TEST_DIR = test

SRC_INCLUDE = include
INCLUDE = -I ${SRC_INCLUDE}

GCOV = gcov
LCOV = lcov
COVERAGE_RESULTS = results.coverage
COVERAGE_DIR = docs/code/coverage

STATIC_ANALYSIS = cppcheck

STYLE_CHECK = cpplint.py

DOXY_DIR = docs/code

#Targets
#
#.PHONY: all
#all: $(PROGRAM_TEST) memcheck coverage docs static style

#Temporary all target. use ^^^ this one once docs and coverage required
.PHONY: all
all: $(PROGRAM_TEST) memcheck static style

%.o: %.cpp
    $(CXX) $(CXXFLAGS) -c $< -o $@

.PHONY: clean
clean:
    rm -rf *~ $(SRC)/*.o $(TEST_DIR)/output/*.dat \
        *.gcov *.gcda *.gcno *.orig ???*/*.orig \
        *.bak ???*/*.bak $(PROGRAM_GAME) \
        ???*/*~ ???*/???*/*~ $(COVERAGE_RESULTS) \
        $(PROGRAM_TEST) $(MEMCHECK_RESULTS) $(COVERAGE_DIR)  \
        $(DOXY_DIR)/html obj bin

$(PROGRAM_TEST): $(TEST_DIR) $(SRC_DIR)
    $(CXX) $(CXXFLAGS) -o $(PROGRAM_TEST) $(INCLUDE) \
        $(TEST_DIR)/*.cpp $(SRC_DIR)/*.cpp $(LINKFLAGS)

tests: $(PROGRAM_TEST)
    $(PROGRAM_TEST)

memcheck: $(PROGRAM_TEST)
    valgrind --tool=memcheck --leak-check=yes $(PROGRAM_TEST)

fullmemcheck: $(PROGRAM_TEST)
    valgrind --tool=memcheck --leak-check=full $(PROGRAM_TEST)

coverage: $(PROGRAM_TEST)
    $(PROGRAM_TEST)
        # Determine code coverage
    $(LCOV) --capture --gcov-tool $(GCOV) --directory . --output-file $(COVERAGE_RESULTS)
        # Only show code coverage for the source code files (not library files)
    $(LCOV) --extract $(COVERAGE_RESULTS) */$(PROJECT_DIR)/$(SRC_DIR)/* -o $(COVERAGE_RESULTS)
        #Generate the HTML reports
    genhtml $(COVERAGE_RESULTS) --output-directory $(COVERAGE_DIR)
        #Remove all of the generated files from gcov
    rm -f *.gcda *.gcno

static: ${SRC_DIR} ${TEST_DIR}
    ${STATIC_ANALYSIS} --verbose --enable=all ${SRC_DIR} ${TEST_DIR} ${SRC_INCLUDE} --suppress=missingInclude

style: ${SRC_DIR} ${TEST_DIR} ${SRC_INCLUDE}
    ${STYLE_CHECK} $(SRC_INCLUDE)/* ${SRC_DIR}/* ${TEST_DIR}/*

#.PHONY: docs
#docs: ${SRC_INCLUDE}
#        doxygen $(DOXY_DIR)/doxyfile

运行 "make tests" 结果如下

g++ -std=c++11 -g -fprofile-arcs -ftest-coverage -o testProject -I include \
        test/*.cpp src/*.cpp -lgtest
testProject
make: testProject: Command not found
Makefile:53: recipe for target 'tests' failed
make: *** [tests] Error 127

知道为什么这行不通吗?或者如何开始尝试解决这个问题?这不是一个非常详细的错误。我不想更改 Makefile,因为它适用于我的学校系统,而且这是一个共享项目。

我的家庭系统是 运行ning Windows 10,我正在使用 Ubuntu shell 到 运行 生成文件

在POSIX shell 中默认不搜索当前工作目录。这是一项安全措施,源自 POSIX 作为多用户系统的起源:您不希望有人能够将 ls 之类的程序放到某个目录中并让毫无戒心的人 运行 只需在该目录中键入 ls

显然,在您的学校系统中,有人已将当前工作目录 (.) 添加到您的 PATH 环境变量中,而在家里您没有添加它。

你的 makefile 有误,配方应该是:

tests: $(PROGRAM_TEST)
        ./$(PROGRAM_TEST)

强制当前工作目录中的程序成为 运行,而不是依赖出现在 PATH 中的 cwd(或 运行ning testProgram 正好在你的 PATH 上)。

这将适用于您的所有系统。