问题描述
我在项目中使用Unity测试库。理想情况下,无论我拥有多少种不同的CMake配置(一个Debug和一个Release CMake配置),我都想自动从GitHub下载源代码并将其放在external /目录中,一次构建该库,并链接该库我的应用程序。
我尝试使用FetchContent,ExternalProject和add_sub目录,但似乎都无法正常工作。
我目前面临的问题是:
- 该库安装在我的build /目录的_deps /子目录中。我希望将其下载到项目根目录中的外部目录。
- “ cmake --build”。每次都建立库。我只想将库构建一次。
- “ cmake --install”。安装我的应用程序和Unity库。运行此命令时,我只想安装即可安装我的应用程序。该库将在构建我的应用程序之前安装在lib /和include /中。
这是我的项目结构:
project/ <-- Project root
|-- bin/ <-- Application executable
|-- build/ <-- CMake build files
| |-- _deps/ <-- Where Unity is built
|-- doc/ <-- Documentation from Doxygen
|-- include/ <-- Unity header files
|-- lib/ <-- Unity library file
|-- module/ <-- Application source code
|-- CMakeLists.txt <-- CMake configuration file
这是我的CMakeLists.txt:
cmake_minimum_required(VERSION 3.15)
project(Project VERSION 1.0.0)
set(CMAKE_INSTALL_PREFIX ${PROJECT_SOURCE_DIR})
include_directories(${PROJECT_SOURCE_DIR}/include)
add_subdirectory(module)
# Add Unity testing framework from GitHub
include(FetchContent)
FetchContent_Declare(
unity
GIT_REPOSITORY https://github.com/ThrowTheSwitch/Unity.git
GIT_TAG v2.5.1
)
FetchContent_MakeAvailable(unity)
FetchContent_GetProperties(unity)
if (NOT unity_POPULATED)
FetchContent_Populate(unity)
add_subdirectory(${unity_SOURCE_DIR} ${unity_BINARY_DIR})
endif()
enable_testing()
add_subdirectory(tests)
我真的不知道如何实现这一目标。我看了一下other question和this link,但似乎并没有完成我想做的所有事情。任何帮助表示赞赏。
解决方法
我能够使用ExternalProject使其工作。这是我的CMakeLists.txt现在的样子:
include(ExternalProject)
set(UNITY unity_project)
ExternalProject_Add(
unity_project
GIT_REPOSITORY https://github.com/ThrowTheSwitch/Unity.git
GIT_TAG cf949f45ca6d172a177b00da21310607b97bc7a7
PREFIX ${PROJECT_SOURCE_DIR}/external/${UNITY}
CONFIGURE_COMMAND cmake ../${UNITY}
BUILD_COMMAND cmake --build .
INSTALL_COMMAND cmake --install . --prefix ${PROJECT_SOURCE_DIR}
UPDATE_COMMAND ""
)
add_library(unity STATIC IMPORTED)
set_property(TARGET unity PROPERTY IMPORTED_LOCATION ${PROJECT_SOURCE_DIR}/lib/libunity.a)
add_dependencies(unity unity_project)
第一个问题由以下行解决:
PREFIX ${PROJECT_SOURCE_DIR}/external/${UNITY}
第二行通过以下行解决:
UPDATE_COMMAND ""
第三个问题由以下行解决:
INSTALL_COMMAND cmake --install . --prefix ${PROJECT_SOURCE_DIR}