我有一个依赖于外部库(如SDL)的程序。我希望CMake可以为我处理这个依赖关系,所以我正在研究FetchContent
。据我所知,这个模块只是下载源代码,以便在配置时间可用外部库的信息。例如:
include(FetchContent)
FetchContent_Declare(sdl
GIT_REPOSITORY <...>
)
FetchContent_GetProperties(sdl)
# sdl_POPULATED, sdl_SOURCE_DIR and sdl_BINARY_DIR are ready now
if(NOT sdl_POPULATED)
FetchContent_Populate(sdl)
endif()
然而,在某些时候,我希望构建该源代码并将其链接到我的主可执行文件。如何用“现代化的CMake方法”来完成?
add_subdirectory(${libname_SOURCE_DIR})
调用将该库添加到您的构建中。我快速查看了一下SDL。看起来它不是使用cmake构建的。在这种情况下,您可以尝试使用https://cmake.org/cmake/help/latest/command/add_custom_target.html来构建SDL(使用COMMAND关键字调用SDL的本地构建cmd),然后配置自定义目标,以便其他目标可以依赖它。一个很好的写作:https://pabloariasal.github.io/2018/02/19/its-time-to-do-cmake-right/ - Mattadd_subdirectory
命令,让CMake来完成工作。否则,我就必须使用add_custom_target
命令手动构建它。这很好知道,你可以把你的评论变成一个答案 :) - Ignorant