CMake cannot find GoogleTest required library in Ubuntu
Solution 1
Google test was probably not properly installed (libgtest-dev
may install only source files that needed to be compiled). I had the same problem and I followed the instructions from http://www.eriksmistad.no/getting-started-with-google-test-on-ubuntu/
sudo apt-get install libgtest-dev
sudo apt-get install cmake # install cmake
cd /usr/src/gtest
sudo cmake CMakeLists.txt
sudo make
#copy or symlink libgtest.a and libgtest_main.a to your /usr/lib folder
sudo cp *.a /usr/lib
This worked for me.
Solution 2
As explained by @detrick, the Ubuntu package libgtest-dev
only installs sources, so you need to build and install the libraries yourself.
However, there is a much simpler way for building and installing since Ubuntu 18.04 than the manual commands in other answers:
sudo apt install libgtest-dev build-essential cmake
cd /usr/src/googletest
sudo cmake .
sudo cmake --build . --target install
Solution 3
ntox86-c++ looks like a cross-compiler, libgtest-dev
package does not provide compiled library for the target platform (QNX).
Since year 2014 compiled libraries was dropped from libgtest-dev
and has been added again in Ubuntu-20.04 focal, so find_package(GTest REQUIRED)
does not work on Ubuntu-16.04 xenial and Ubuntu-18.04 bionic. The reason is given in /usr/share/doc/googletest/README.Debian
(/usr/share/doc/libgtest-dev/README.Debian
) and in e.g. in /usr/src/googletest/googletest/docs/V1_7_FAQ.md
"Why is it not recommended to install a pre-compiled copy of Google Test (for example, into /usr/local
)" section. Difference in compiler flags for the library and for a test could generate incompatible executable code. The problem with 18.04 and 16.04 is the reason why I have decided to add another answer to the old question.
add_subdirectory
could be used to compile gtest provided by system package
set(GTest_ROOT /usr/src/googletest/googletest)
add_subdirectory(${GTest_ROOT}
"${CMAKE_CURRENT_BINARY_DIR}/googletest" EXCLUDE_FROM_ALL)
add_executable(test test.cpp)
target_link_libraries(test gtest_main)
# or just gtest if main function is defined
Instead of using system package for googletest sources there are at least 2 variants how to obtain particular version from git (besides obvious submodule), see
- https://cmake.org/cmake/help/latest/module/FetchContent.html
- https://github.com/google/googletest/blob/master/googletest/README.md
Admin
Updated on August 15, 2020Comments
-
Admin over 3 years
Similar issue here.
This is my CMakeLists.txt:
cmake_minimum_required(VERSION 2.6) # Locate GTest find_package(GTest REQUIRED) include_directories(${GTEST_INCLUDE_DIRS}) # Add test cpp file add_executable(foo foo.cpp) # Link test executable against gtest & gtest_main target_link_libraries(foo ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} pthread)
And my foo.cpp:
#include <gtest/gtest.h> TEST(sample_test_case, sample_test) { EXPECT_EQ(1, 1); } int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }
Now, all works fine when using the g++ compiler. However, when attempting to use QNX's compiler, ntox86-c++, I run into this problem:
CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (MESSAGE): Could NOT find GTest (missing: GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY)
I am on Ubuntu using the ntox86-c++ compiler, googletest, and cmake-gui.
What gives?
-
usr1234567 over 8 yearsYou should not copy your library into /usr/lib. Instead pass CMake the right flag like GTEST_ROOT or add your GTest directory into CMake's search path.
-
Conchylicultor over 7 years@detrick forgot to add
cd /usr/src/gtest
before runningsudo cmake CMakeLists.txt
to compilelibgtest-dev
-
jcmonteiro almost 5 yearsNote that you should not copy generated files by hand. Instead, use
sudo make install
-
jinge over 4 yearsThis doesn't work in Ubuntu 16.04. No rule to make target 'install'.
-
mrts over 4 years@jinge, you are right, this works for Ubuntu 18.04 and newer. I updated the answer accordingly.