【问题标题】:Error with gtest installation on home system在家庭系统上安装 gtest 时出错
【发布时间】:2020-03-08 11:32:24
【问题描述】:

我正在尝试以与学校计算机相同的方式设置我的家用计算机,以便我可以从这里完成我的作业,但我无法让 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,因为它适用于我的学校系统,而且这是一个共享项目。

我的家庭系统运行的是 Windows 10,我使用 Ubuntu shell 来运行 makefile

【问题讨论】:

    标签: c++ makefile libraries googletest windows-subsystem-for-linux


    【解决方案1】:

    在 POSIX shell 中,默认情况下不搜索当前工作目录。这是一项源自 POSIX 起源于多用户系统的安全措施:您不希望有人能够将像 ls 这样的程序放到某个目录中,并让毫无戒心的人通过在其中键入 ls 来运行它那个目录。

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

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

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

    强制运行当前工作目录中的程序,而不是依赖出现在PATH 中的cwd(或运行恰好在PATH 上的testProgram 的其他实例)。

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

    【讨论】:

    • 非常感谢!我将如何将 ./ 添加到我的 PATH 变量中?
    • 你不应该这样做,因为我提到的原因(这是一个安全漏洞)以及其他原因,例如你不应该编写一个除非有人使用它才能工作的 makefile以特定方式配置了他们的环境。如果您仍然想这样做,您应该调查您的 shell 的文档并找出 shell 设置文件的位置以及它们的名称,然后您可以在其中一个文件中修改您的 PATH 环境变量。
    猜你喜欢
    • 2018-10-22
    • 1970-01-01
    • 2012-03-15
    • 2023-04-10
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多