【发布时间】:2020-12-05 23:05:40
【问题描述】:
我在我的项目中使用 Unity 测试库。理想情况下,我想自动从 GitHub 下载源代码并将其放在 external/ 目录中,构建一次库,无论我有多少不同的 CMake 配置(一个 Debug 和一个 Release CMake 配置),然后链接库与我的应用程序。
我曾尝试使用 FetchContent、ExternalProject 和 add_subdirectory,但它们似乎都不能正常工作。
我目前面临的问题是:
- 该库安装在我的 build/ 目录的 _deps/ 子目录中。我希望将其下载到项目根目录中名为 external/ 的目录中。
- “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,但它似乎并没有完成我想做的所有事情。任何帮助表示赞赏。
【问题讨论】:
-
您的所有 3 个问题实际上都不相关,应该作为单独的问题帖子提出。如需使用 FetchContent 设置下载目录,请参阅that question。
FetchContent允许与主项目一起构建子项目。如果您只想为主项目的多个配置构建一次子项目,请改用ExternalProject。另请注意,FetchContent_MakeAvailable完成了以下 5 行中的所有操作,因此不需要它们。 -
@Tsyvarev 有帮助,谢谢。
标签: c++ c unit-testing cmake build