从昨天开始,我的任何包含测试的包都没有构建。Catkin抱怨在使用catkin_add_gtests()时找不到gtest,因为GTEST_FOUND是FALSE。您可以在下面的错误消息中看到这一点,其中包含我添加到CMakeLists中的自定义输出。直到昨天,当catkin_add_gtests()被调用时,GTEST_FOUND是真的。
这是我总是得到的错误。在本例中,我尝试在一个干净的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的结果。在函数式工作区中,line 292的计算结果为真(gtest/gmock不是目标),而在我的工作区中,它的计算结果为假。这是因为在我的工作区中,运行find_package(GMock QUIET) (第287行)将gmock和gtest设置为导入的目标,这在另一台计算机上是不会发生的。为什么这是不同的?
感谢TikO的帮助!
发布于 2018-08-26 22:34:42
由于您编写的cmake找不到这些库,并且您已经重新安装了Kinetic,因此我假设您有一台新安装的计算机或意外地清除了gtest库。如果你安装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_makeLIBRARY_PATH告诉链接器在哪里可以找到这些库,而GTEST_ROOT则给cmake提供位置提示,以便进行检查。
发布于 2018-09-18 22:01:21
找到解决方案
gmock和gtest被设置为导入的目标,因为建议的手动编译libgtest已经在/usr/share/cmake-3.5/Modules中创建了一个FindGMock.cmake文件。此文件由catkin_add_gtests()中的find(GMock QUIET)调用,因此设置了导入的目标。删除FindGMock.cmake就解决了这个问题。
https://stackoverflow.com/questions/51969824
复制相似问题