如何在 cmake 中包含第三方工具?
How to include third party tools with cmake?
我一直在从事 CPP 项目,但在 visual studio IDE 上使用配置。现在,我想使用构建系统生成器 CMake。这个入门有点难。
我正在尝试为我的测试添加 cppunit 第三方工具。为此,我在文件夹 third_party 中添加了 include 和 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)
请找到文件夹结构的快照
add_subdirectory(${CPP_UNIT_DIR})
将在为 CMakeLists.txt 指定的目录中查找,并且由于 CppUnit 有一个 CMakeLists.txt 文件(https://github.com/Ultimaker/CppUnit/blob/master/CMakeLists.txt),它将构建指定的库 add_library(cppunit STATIC ${Sources})
即 cppunit
.
然后当您指定要构建的目标时,您可以 link 在 cppunit 中使用 target_link_libraries(your_target cppunit)
。但是您需要创建目标,例如使用 add_executable(one two.cpp three.h)
创建目标 one
.
https://cliutils.gitlab.io/modern-cmake/ 是一个很好的 CMake 介绍资源。并且有不同的方式引入外部项目,例如通过 git 子模块。
如果您在 src
子目录中有一个 CMakeLists.txt 文件,您可以在其中创建目标 link in cppunit
.
至于关于 include_directories
的评论,通常认为使用 target_include_directories
是一种很好的做法,有关更多信息,请参阅 和上面的 linked 资源。
我一直在从事 CPP 项目,但在 visual studio IDE 上使用配置。现在,我想使用构建系统生成器 CMake。这个入门有点难。
我正在尝试为我的测试添加 cppunit 第三方工具。为此,我在文件夹 third_party 中添加了 include 和 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)
请找到文件夹结构的快照
add_subdirectory(${CPP_UNIT_DIR})
将在为 CMakeLists.txt 指定的目录中查找,并且由于 CppUnit 有一个 CMakeLists.txt 文件(https://github.com/Ultimaker/CppUnit/blob/master/CMakeLists.txt),它将构建指定的库 add_library(cppunit STATIC ${Sources})
即 cppunit
.
然后当您指定要构建的目标时,您可以 link 在 cppunit 中使用 target_link_libraries(your_target cppunit)
。但是您需要创建目标,例如使用 add_executable(one two.cpp three.h)
创建目标 one
.
https://cliutils.gitlab.io/modern-cmake/ 是一个很好的 CMake 介绍资源。并且有不同的方式引入外部项目,例如通过 git 子模块。
如果您在 src
子目录中有一个 CMakeLists.txt 文件,您可以在其中创建目标 link in cppunit
.
至于关于 include_directories
的评论,通常认为使用 target_include_directories
是一种很好的做法,有关更多信息,请参阅