相关疑难解决方法(0)

Cmake 无法找到 Gmock 的软件包

我是 Cmake 和 Gtest 的新手。我在 CMake 中有问题

find_package(GMock REQUIRED)
Run Code Online (Sandbox Code Playgroud)

target_link_libraries(runtest ${GMOCK_BOTH_LIBRARIES} pthread).
Run Code Online (Sandbox Code Playgroud)

当我构建项目时,CMake 找不到 GMock 包。

但是当我提到库的绝对路径时,它工作正常。

例如:

set(GMOCK_INCLUDE_DIRS /usr/local/include/gmock)

set(GMOCK_BOTH_LIBRARIES /usr/local/lib/libgmock.a /usr/local/lib/libgmock_main.a /usr/local/lib/libgtest.a /usr/local/lib/libgtest_main.a)
Run Code Online (Sandbox Code Playgroud)

现在的问题是我的主管建议我找到仅使用查找包来运行代码的解决方案。在做了一些研究之后,我才知道FindGMock.cmakeCmake 模块中缺少该文件。我添加了它并使用 再次运行代码find_package(),但它仍然无法正常工作。

错误是对 Gmock 和 Gtest 功能的未定义引用。

例如 :

undefined reference to `testing::Message::Message()'.

undefined reference to testing::internal::GetBoolAssertionFailureMessage.
undefined reference totesting::internal::AssertHelper::~AssertHelper()'
Run Code Online (Sandbox Code Playgroud)

这样的错误太多了。

谁能解释一下,如何让 CMake 自动找到 GMock 包?

cmake googletest

8
推荐指数
1
解决办法
5589
查看次数

什么是CMAKE_BUILD_TYPE:调试,发布,RelWithDebInfo和MinSizeRel?

文档页面

CMAKE_BUILD_TYPE

指定单配置生成器上的构建类型。

这静态指定将在此构建树中构建哪种构建类型(配置)。可能的值是空的,DebugReleaseRelWithDebInfoMinSizeRel。此变量仅对单配置生成器(例如Makefile GeneratorsNinja)有意义,即那些在CMake运行以生成生成树时选择单个配置的生成器,而与多配置生成器不同,后者在生成的生成环境中提供对构建配置的选择。有许多按配置的属性和变量(通常遵循SOME_VAR_<CONFIG>无序顺序约定),例如CMAKE_C_FLAGS_<CONFIG>,指定为大写:CMAKE_C_FLAGS_[DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL]。例如,在配置为build type的构建树中Debug,CMake将看到CMAKE_C_FLAGS_DEBUG已将设置添加到CMAKE_C_FLAGS设置。另请参阅CMAKE_CONFIGURATION_TYPES

我知道之间的差异Debug构建和Release建立,但什么是之间的差异ReleaseRelWithDebInfo以及MinSizeRel?我猜的RelWithDebInfo意思是创建可调试的二进制文件,并MinSizeRel意味着创建可能的最小大小的二进制文件。

LLVM CMake页面

CMAKE_BUILD_TYPE:STRING

如果使用的是Visual Studio之类的IDE,则应使用IDE设置来设置构建类型。请注意,Release和RelWithDebInfo在大多数平台上使用不同的优化级别。

如果要生成生产版本,应该选择Release吗?

cmake

7
推荐指数
3
解决办法
1万
查看次数

标签 统计

cmake ×2

googletest ×1