如何在Windows上设置GoogleTest变量GTEST_LIBRARY GTEST_INCLUDE_DIR和GTE
How to set GoogleTest variables GTEST_LIBRARY GTEST_INCLUDE_DIR and GTEST_MAIN_LIBRARY to CMake on Windows?
有一个为linux环境开发的项目。现在我正在尝试使用CMake在windows上构建此。
我一直尝试构建项目,总是得到这个错误:
CMake Error at C:/Program Files(x86)/CMake/share/cmake-3.3/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
Could NOT find GTest (missing: GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY)
Call Stack (most recent call first):
C:/Program Files(x86)/CMake/share/cmake-3.3/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
C:/Program Files(x86)/CMake/share/cmake-3.3/Modules/FindGTest.cmake:204 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
C:/Users/awy9/git/cmake_modules/modules/SigeoGTest.cmake:21 (find_package)
C:/Users/awy9/git/cmake_modules/modules/SigeoInit.cmake:29 (include)
CMakeLists.txt:12 (include)
我怎么能设置这些变量工作在这个项目现在在Windows上?
老实说,像GTEST_LIBRARY和GTEST_MAIN_LIBRARY那样设置硬编码变量并不是最好的主意。
我有完全相同的问题。我在windows上使用gtest 1.7.0并得到相同的错误。原来"GTest"应该是"GTest"(不大写)。
所以CMakeLists.txt中的代码变成了: find_package(gtest REQUIRED)
注意,我使用的是CMake 3.9
编辑
我强烈建议你现在就按照这个指南去做:
http://crascit.com/2015/07/25/cmake-gtest/
这是迄今为止我发现的在cmake项目中使用未构建的gtest和gmock的最佳方法。
UPDATE
@Tsyvarev帮我解决了第一个问题,我引用他的话:这是标准的CMake消息,当请求的包(GTest在你的情况下)没有找到。您应该在配置项目之前安装GTest。或者,如果您已经将它安装到非标准位置,通过GTEST_ROOT变量传递此位置:cmake -DGTEST_ROOT=…
作为将变量传递给cmake的替代方法,您可以设置环境变量:
这解决了GTEST_INCLUDE_DIR值的问题,但我仍然有这些错误:
<CMake Error at C:/Program Files (x86)/CMake/share/CMake -3.3/Modules/FindPackageH andleStandardArgs。cmake:148 (message): Could NOT find GTest (missing: GTEST_LIBRARY GTEST_MAIN_LIBRARY)
解决方案/strong>
我发现在Windows环境下有些值和手册上说的不一样。
编译Gtest后,我得到了两个库:Lib和gtest_main.lib然后,我设置这些文件路径变量:
GTEST_LIBRARY = C: awy9 用户软件gt gtest-1.7.0 gtest.lib调试GTEST_MAIN_LIBRARY = C: awy9 用户软件gt gtest-1.7.0 调试 gtest_main.lib
现在一切正常!
谢谢
我在Windows平台上通过GitHub Actions构建我的项目时遇到了类似的问题。
即使我导出 在深入研究这个问题之后,我意识到在Windows上命令 如果你在CMAKE_PREFIX_PATH
以使find_package(GTest REQUIRED)
能够正确地找到框架库(Windows是有点讨厌的BTW),它仍然与Could NOT find GTest (missing: GTEST_LIBRARY GTEST_MAIN_LIBRARY)
失败。请注意,它会正确地获取include目录。cmake --build . --target install
没有任何--config
选项,在Debug
配置中构建库,与Linux和macOS相反。Release
中构建你的项目,例如cmake .. -DCMAKE_BUILD_TYPE=Release && cmake --build . --config Release --target install
, find_package(GTest REQUIRED)
将找不到任何GTest库,因为它搜索不存在的Release
构建。Release
模式下安装GTest, w.r.t.硬编码库路径以获取Debug
目录构建。
我还附加了GitHub行动步骤,这可能对某人有帮助:
steps:
- name: Clone GTest
shell: bash
working-directory: ${{runner.workspace}}
run: git clone https://github.com/google/googletest.git
- name: Create GTest Build Environment
shell: bash
working-directory: ${{runner.workspace}}/googletest
run: cmake -E make_directory build
- name: Configure GTest CMake
shell: bash
working-directory: ${{runner.workspace}}/googletest/build
run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_CXX_FLAGS=-std=c++11
- name: Install GTest
shell: bash
working-directory: ${{runner.workspace}}/googletest/build
run: cmake --build . --config $BUILD_TYPE --target install || sudo cmake --build . --config $BUILD_TYPE --target install
- name: Export CMAKE_PREFIX_PATH on Windows
shell: bash
if: runner.os == 'Windows'
run: echo '::set-env name=CMAKE_PREFIX_PATH::C:/Program Files (x86)/googletest-distribution'
- name: Checkout
uses: actions/checkout@v2
- ... your project build steps
- Boost Graph Library,修复节点大小
- SFML library: http request
- 在gtest.中使用fff.h模拟系统API
- 如何解决GTest和LibTorch联动冲突
- 如何将GTest与CMake一起使用?遵循谷歌指南时的链接问题
- 解决"ld: library not found for -ltensorflow_framework.2.3.0"
- 在 gtest 中初始化堆栈上的引用变量的隔离错误
- Linking library C++
- 在VS2019项目中集成ImageMagick:x64-windows-static library
- GTest,仅参数化测试用例
- OpenSSL fips in C++ wrapper Library 如何?错误:指纹不匹配
- 使用 gtest 时"_main already defined"
- GTEST : 如何将数组列表作为参数传递到 ValuesIn of INSTANTIATE_TEST_CASE_P?
- C++ class vs a library
- C++ library with Tensorflow on Android
- 无法将 GTest 中的类与 CMake 链接
- 使用 gtest 框架在单元测试代码中检查目标对象的私有变量的最佳实践是什么?
- CMake:尝试在 Jenkins 构建机器上运行时出现"Linked Library"错误 (0xc0000135)
- 如何使用成员 c++ 使用 gtest 测试基于私有类的行为
- C++ 具有GTest TYPED_TEST的多个参数