c – 如何告诉CMAKE下载一些必要的头文件(更准确地说是GLM数学库)而不试图编译它们?

我正在建立一个使用大量ExternalProjects的CMAKE项目.要构建其中一个(CEGUI),我需要下载GLM(OpenGL数学库).此库仅包含库,这意味着您不能编译它.有一些测试可以编译,但在我的项目中不需要它们(而且,其中一个不能正确编译并打破编译链).

我想要的是找到一种方法告诉CMAKE只下载项目(GIT更新等),就像它通常使用ExternalProject_add()函数一样,但不试图编译它(产生一个致命错误),并安装INCLUDE文件(确实是库).

是否有下载头文件并在CMAKE中安装它们的功能?有没有人已经有GLM标题库这个问题?

解决方法

通过将CONfigURE_COMMAND和BUILD_COMMAND设置为空字符串,可以避免在 ExternalProject_Add中配置和构建步骤.

至于安装 – 我一般不打扰.我喜欢将所有第三方源保留在我自己的构建树中,并在我自己的项目中引用这些.但是,您可以在这种情况下安装步骤类似于cmake -E copy_directory ….

所以完整的命令可能是:

include(ExternalProject)
ExternalProject_Add(
    glm
    PREFIX ${CMAKE_BINARY_DIR}/glm
    GIT_REPOSITORY https://github.com/g-truc/glm.git
    CONfigURE_COMMAND ""
    BUILD_COMMAND ""
    INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory
                    <SOURCE_DIR>/glm ${CMAKE_BINARY_DIR}/installed/glm
    LOG_DOWNLOAD ON
    LOG_INSTALL ON
    )

如果您也想避免安装步骤,那么也只需将其设置为空字符串.然后,要获取GLM包含目录(将在后续的target_include_directoriesinclude_directories调用中使用),只需执行以下操作:

include(ExternalProject)
ExternalProject_Add(
    glm
    PREFIX ${CMAKE_BINARY_DIR}/glm
    GIT_REPOSITORY https://github.com/g-truc/glm.git
    CONfigURE_COMMAND ""
    BUILD_COMMAND ""
    INSTALL_COMMAND ""
    LOG_DOWNLOAD ON
    )
ExternalProject_Get_Property(glm source_dir)
set(GlmIncludeDir ${source_dir}/glm)

...

target_include_directories(MyTarget PRIVATE ${GlmIncludeDir})

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...