C++ CMake在Ubuntu中找不到GoogleTest所需的库

C++ CMake在Ubuntu中找不到GoogleTest所需的库,c++,ubuntu,cmake,googletest,qnx,C++,Ubuntu,Cmake,Googletest,Qnx,类似的问题 这是我的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_m

类似的问题

这是我的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)
和我的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();
}
#包括
测试(样本测试案例、样本测试)
{
期望q(1,1);
}
int main(int argc,字符**argv)
{
测试:InitGoogleTest(&argc,argv);
返回运行所有测试();
}
现在,使用g++编译器时,所有这些都可以正常工作。但是,在尝试使用QNX的编译器ntox86-c++时,我遇到了以下问题:

CMake错误位于/usr/share/CMake-2.8/Modules/FindPackageHandleStandardArgs。CMake:97(消息): 找不到GTest(缺少:GTest\u库GTest\u INCLUDE\u目录 GTEST_主库)

我在Ubuntu上使用ntox86-c++编译器、googletest和cmake gui


给出了什么?

谷歌测试可能没有正确安装(
libgtest-dev
可能只安装需要编译的源文件)。我也有同样的问题,我按照


这对我很有用。

不久前,我创建了一个dockerfile,它帮助我保留了一种配方,以便以后在我的系统上安装google test:

apt-get install -y git g++ make cmake 
git clone https://github.com/google/googletest.git
cd googletest
mkdir gbuild && cd gbuild && cmake .. && make
cp -r googletest/include/gtest /usr/local/include
cp gbuild/googlemock/gtest/lib*.a /usr/local/lib
cp gbuild/googlemock/lib*.a /usr/local/lib

我希望它能有所帮助:)

正如@detrick所解释的,Ubuntu包
libgtest dev
只安装源代码,所以您需要自己构建和安装库

然而,自Ubuntu 18.04以来,有一种比其他答案中的手动命令更简单的构建和安装方法:

sudo apt install libgtest-dev build-essential cmake
cd /usr/src/googletest
sudo cmake .
sudo cmake --build . --target install

ntox86-c++看起来像一个交叉编译器,
libgtest-dev
package没有为目标平台(QNX)提供编译库

自2014年以来,编译库从
libgtest-dev
中删除,并在Ubuntu-20.04 focal中再次添加,因此
find_包(需要GTest)
在Ubuntu-16.04 xenial和Ubuntu-18.04 bionic上不起作用。原因见
/usr/share/doc/googletest/README.Debian
/usr/share/doc/libgtest dev/README.Debian
)和
/usr/src/googletest/googletest/docs/V1_7_FAQ.md
“为什么不建议安装谷歌测试的预编译副本(例如,安装到
/usr/local
)”部分。库和测试的编译器标志的差异可能会生成不兼容的可执行代码。18.04和16.04的问题是我决定对旧问题添加另一个答案的原因

add_子目录
可用于编译系统包提供的gtest

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
除了使用system package for googletest源代码外,至少有两种变体可以从git获得特定版本(除了明显的子模块),请参阅


当我安装gtest而不是gtest-devel时,这种情况发生在我身上。在Ubuntu上,我猜您需要类似于
sudo apt get install libgtest dev
的东西,您能否在收到错误消息之前共享最后一次输出。我认为它将测试某些头(包括)或库的存在。这将有助于缩小问题的范围。您不应该将库复制到/usr/lib中。相反,在运行
sudo CMake CMakeLists.txt
编译
libgtest dev
之前,detrick忘了添加
cd/usr/src/GTEST
。相反,使用
sudomakeinstall
这在Ubuntu 16.04中不起作用。没有规则让目标“安装”。@jinge,你是对的,这适用于Ubuntu 18.04及更新版本。我相应地更新了答案。
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