微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 cmake 中包含第三方工具?

如何解决如何在 cmake 中包含第三方工具?

我一直在从事 CPP 项目,但在 Visual Studio IDE 上使用配置。现在,我想使用构建系统生成器 CMake。开始使用这个有点困难。

我正在尝试为我的测试添加 cppunit 第三方工具。为此,我在文件夹 third_party 中添加了包含和 lib 文件。但不确定如何将其包含在 CMakeLists.txt 中。

请找到 CMakeList.txt

# CMake version setting
cmake_minimum_required(VERSION 3.8)
if(${CMAKE_VERSION} VERSION_LESS 3.19)
    cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MInor_VERSION})
else()
    cmake_policy(VERSION 3.19)
endif()

# Set project name and version
project(myproject
    VERSION 1.0
    DESCRIPTION "Setup cmake build system"
    LANGUAGES CXX
)

# Third party dependencies
set(THIRD_PARTY_DIR "${PROJECT_SOURCE_DIR}/third_party")

# CPP unit
set(CPP_UNIT_LIB_NAME "cppunit")
set(CPP_UNIT_VERSION "1.13.2")
set(CPP_UNIT_DIR "${THIRD_PARTY_DIR}/${CPP_UNIT_LIB_NAME}/${CPP_UNIT_VERSION}")

# NOT sure what to do here
# add_subdirectory(${CPP_UNIT_DIR})
# target_include_directories(${PROJECT_NAME} PRIVATE "${CPP_UNIT_DIR}/include/cppunit")
# target_link_libraries(${PROJECT_NAME}  ${CPP_UNIT_LIB_NAME} ${CPP_UNIT_LIBRARIES})
# target_compile_deFinitions(${PROJECT_NAME}  PRIVATE "CPP_UNIT_INCLUDE_NONE")

add_subdirectory(src)

请找到文件夹结构的快照

enter image description here

解决方法

add_subdirectory(${CPP_UNIT_DIR}) 将在为 CMakeLists.txt 指定的目录中查找,因为 CppUnit 有一个 CMakeLists.txt 文件(https://github.com/Ultimaker/CppUnit/blob/master/CMakeLists.txt),它将构建指定的库 add_library(cppunit STATIC ${Sources}),它是 {{ 1}}。

然后当您指定要构建的目标时,您可以使用 cppunit 在 cppunit 中进行链接。但是您需要创建目标,例如使用创建目标 target_link_libraries(your_target cppunit)add_executable(one two.cpp three.h)

https://cliutils.gitlab.io/modern-cmake/ 是 CMake 的一个很好的介绍性资源。并且可以通过不同的方式引入外部项目,例如通过 git 子模块。

如果您在 one 子目录中有 CMakeLists.txt 文件,您可以在其中创建目标,您可以在 src 中链接。

至于关于 cppunit 的评论,通常认为使用 include_directories 是好的做法,请参阅 What is the difference between include_directories and target_include_directories in CMake? 和上述链接资源了解更多信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。