googletest - Catkin 找不到 gtest
问题描述
从昨天开始,我的包含测试的包都没有构建。Catkin 抱怨在使用 catkin_add_gtests() 时找不到 gtest,因为 GTEST_FOUND 为 FALSE。您可以在下面的错误消息中看到这一点,其中包含我添加到 CMakeLists 中的自定义输出。直到昨天,调用 catkin_add_gtests() 时 GTEST_FOUND 为 TRUE。
这是我经常遇到的错误。在这种情况下,我试图在一个干净的 catkin 工作区上构建一个模型包:
Errors << silly_pkg:cmake /home/paco/catkin_ws2/logs/silly_pkg/build.cmake.002.log
Not searching for unused variables given on the command line.
Re-run cmake no build system arguments
-- Using CATKIN_DEVEL_PREFIX: /home/paco/catkin_ws2/devel/.private/silly_pkg
-- Using CMAKE_PREFIX_PATH: /home/paco/catkin_ws2/devel;/opt/ros/kinetic
-- This workspace overlays: /home/paco/catkin_ws2/devel;/opt/ros/kinetic
-- Using PYTHON_EXECUTABLE: /usr/bin/python
-- Using Debian Python package layout
-- Using empy: /usr/bin/empy
-- Using CATKIN_ENABLE_TESTING: ON
-- Call enable_testing()
-- Using CATKIN_TEST_RESULTS_DIR: /home/paco/catkin_ws2/build/silly_pkg/test_results
-- Using Python nosetests: /usr/bin/nosetests-2.7
-- catkin 0.7.11
-- GTEST_FOUND: FALSE
CMake Warning at /opt/ros/kinetic/share/catkin/cmake/test/gtest.cmake:149 (message):
skipping gtest 'test_silly_pkg' in project 'silly_pkg' because gtest was
not found
Call Stack (most recent call first):
/opt/ros/kinetic/share/catkin/cmake/test/gtest.cmake:79 (_catkin_add_executable_with_google_test)
/opt/ros/kinetic/share/catkin/cmake/test/gtest.cmake:28 (_catkin_add_google_test)
CMakeLists.txt:28 (catkin_add_gtest)
CMake Error at /home/paco/catkin_ws2/src/silly_pkg/CMakeLists.txt:33 (target_link_libraries):
Cannot specify link libraries for target "test_silly_pkg" which is not
built by this project.
-- Configuring incomplete, errors occurred!
See also "/home/paco/catkin_ws2/build/silly_pkg/CMakeFiles/CMakeOutput.log".
See also "/home/paco/catkin_ws2/build/silly_pkg/CMakeFiles/CMakeError.log".
cd /home/paco/catkin_ws2/build/silly_pkg; catkin build --get-env silly_pkg | catkin env -si /usr/bin/cmake /home/paco/catkin_ws2/src/silly_pkg --no-warn-unused-cli -DCATKIN_DEVEL_PREFIX=/home/paco/catkin_ws2/devel/.private/silly_pkg -DCMAKE_INSTALL_PREFIX=/home/paco/catkin_ws2/install; cd -
我正在使用 catkin 0.7.11、libgtest-dev 1.7.0 和 cmake 3.5.1。我在 Ubuntu 16.04 中使用 ROS Kinetic。我昨天唯一做的就是重新安装 ROS Kinetic,但软件包版本完全相同。有人遇到过这个问题吗?你对可能发生的事情有什么想法吗?
编辑 3/09/18:
通过与另一台计算机中的功能性 catkin+gtest 工作区进行比较,我发现主要区别在于/opt/ros/kinetic/share/catkin/cmake/test/gtest.cmake
. 在功能工作区中,第 292 行评估为 TRUE(gtest/gmock 不是目标),而在我的工作区中,它评估为 FALSE。这是因为在我的工作区运行中find_package(GMock QUIET)
(第 287 行)将 gmock 和 gtest 设置为导入目标,而这在另一台计算机中不会发生。为什么会有所不同?
感谢 TikO 的帮助!
解决方案
由于您写道 cmake 找不到库并且您已重新安装 Kinetic,因此我假设您有一台新安装的机器或意外清除了 gtest 库。如果你 install libgtest-dev
,你只会得到你需要构建和安装的源代码,如下所示:
sudo apt-get install libgtest-dev
mkdir /tmp/gtest_build && cd /tmp/gtest_build
cmake /usr/src/gtest
make
#copy or symlink libgtest.a and ligtest_main.a to /usr/lib folder
sudo cp *.a /usr/lib
在此例程之后,您应该能够再次构建而不会出现 cmake 抱怨。
可选的
如果您在计算机上的权限有限并且不允许以这种方式安装库,只需将它们复制到某个主文件夹中,例如
mkdir ~/lib && cp *.a ~/lib
但请注意,您必须通过以下方式调用 catkin:
LIBRARY_PATH=~/lib GTEST_ROOT=~/lib catkin_make
LIBRARY_PATH
告诉链接器在哪里可以找到库,同时GTEST_ROOT
为 cmake 提供位置提示以进行检查。
推荐阅读
- java - MicroProfile Metrics 不显示 Wildfly 25 上的自定义指标
- android - android:noHistory="true" 或设置标志在可穿戴应用程序中不起作用
- python - 如何使用 Web UI 在 EC2 上运行 Locust
- javascript - TypeError:添加路由时无法读取未定义的属性(读取“位置”)
- github - 触发 github 工作流调度事件后获取运行 ID
- reactjs - 反应状态不更新输入更改
- .htaccess - 使用 htaccess 重定向 url - 也使用 mysql
- hdfs - 深度存储不可达时 Druid 的行为
- javascript - 如何用fusionChart创建灵活的图表(类型)切换功能
- celery - 芹菜动态添加新任务