【问题标题】:How to build gtest static library from my project CMakeLists.txt?如何从我的项目 CMakeLists.txt 构建 gtest 静态库?
【发布时间】:2017-07-03 15:19:46
【问题描述】:

我有一个主项目和一个子项目tests。 在 project/CMakeLists.txt 我添加了

add_subdirectory(tests)

project/tests/CMakeLists.txt 中,我插入“预编译”gtest 库(来自 Ubuntu 存储库)。我 cd 到 /usr/src/gtest 并将两个 *.a 文件编译到系统 lib 目录中。 它工作正常,直到出现google test FAQ 中的问题。

如何从 project/tests/CMakeLists.txt 构建 gtest 静态库文件以及如何使用这个新的 *.a 文件而不是系统文件?

【问题讨论】:

    标签: c++ cmake googletest


    【解决方案1】:

    最后我找到了如何在不添加 googletest 作为子项目的情况下重建静态 libgtest.a

    使用来自this 链接和this 链接底部的信息。

    我的项目/tests/CMakeLists.txt 中有趣的部分:

    .....
    # Locate GTest
    #find_package(GTest REQUIRED)
    #include_directories(SYSTEM ${GTEST_INCLUDE_DIRS})
    set(GTEST_SRC /usr/src/gtest/src/gtest-all.cc)
    include_directories(SYSTEM /usr/src/gtest # <-- path to non-header files from gtest-all.cc
                               /usr/include)  # <-- path to gtest headers
    
    add_library(gtest STATIC ${GTEST_SRC})    # <-- make static library target before main project executable
    target_link_libraries(gtest ${CMAKE_THREAD_LIBS_INIT})
    
    # Link runTests with what we want to test and the GTest and pthread library
    add_executable(tests ${SRC})
    target_link_libraries(tests ${Boost_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} gtest) # <-- finaly link this library as others
    

    【讨论】:

      【解决方案2】:

      我从头开始。 首先,从

      下载googletest源代码

      https://github.com/google/googletest

      当我们下载这个 ZIP 文件时,我们会得到 googletest 和 googlemock 项目,但这里我将只使用 googletest 文件夹。我解压缩 ZIP 并将 googletest 文件夹复制到我的项目中,例如:

      /home/name/myProject/ 
      

      此文件夹中的内容可能如下所示:

      - CMakeLists.txt
      - googletest /
      - main.cpp
      

      在 CMakeList 文件中,我可以将 gtest 添加为子目录并将我的可执行文件链接到它。我构建了一个最小的示例:

      cmake_minimum_required(VERSION 2.6.4)
      project(MyProject)
      
      enable_testing()
      add_subdirectory( googletest )
      
      # this sets the output dir to /bin
      set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
      
      include_directories(${CMAKE_SOURCE_DIR}/googletest/include)
      add_executable(myExe main.cpp)
      target_link_libraries(myExe gtest_main gtest)
      

      最后三行设置 googletest 的包含路径,添加可执行文件并将 exe 链接到 gtest。
      下载 gtest 并创建 cmake 结构后,您可以构建程序:

      $ mkdir bin
      $ cd bin
      $ cmake ..
      $ make
      

      并调用exe:

      $ ./myExe
      

      我希望这会有所帮助。

      【讨论】:

      • 这种方式也很有用,但我希望避免制作 googletest 子项目。
      猜你喜欢
      • 2011-06-05
      • 2015-12-07
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 2012-05-03
      • 1970-01-01
      相关资源
      最近更新 更多