首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从cmake内部运行cmake?

如何从cmake内部运行cmake?
EN

Stack Overflow用户
提问于 2017-06-12 12:24:48
回答 1查看 5.9K关注 0票数 7

我的项目依赖于mariadb连接器-c,我正在尝试用cmake自动化下载、构建和链接过程。

目前,我将项目下载到一个目录中,然后尝试执行生成忍者文件并运行它们,但我根本无法运行cmake:

代码语言:javascript
复制
execute_process(COMMAND "cmake -GNinja ." WORKING_DIRECTORY ${mariadb-connector-c_SOURCE_DIR})

我知道这不起作用,因为下一步运行忍者失败了:

代码语言:javascript
复制
execute_process(COMMAND "ninja" WORKING_DIRECTORY ${mariadb-connector-c_SOURCE_DIR})

cmake在CLI中运行良好,我尝试使用cmake可执行文件的完整路径,并用完整目录替换点(如果您想知道,这也是一个有效的变量)。

如何让cmake在该外部项目上运行cmake?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-12 12:57:15

您可以将您的项目组织到顶级CMakeLists.txt,将您的子项目构建为ExternalProject

这种方法需要更多的工作和更多CMake模块的维护,但它也有其自身的好处。我下载Google测试如下:

代码语言:javascript
复制
# Create download URL derived from version number.
set(GTEST_HOME https://github.com/google/googletest/archive)
set(GTEST_DOWNLOAD_URL ${GTEST_HOME}/release-${GTEST_VERSION}.tar.gz)
unset(GTEST_HOME)

# Download and build the Google Test library and add its properties to the third party arguments.
set(GTEST_ROOT ${THIRDPARTY_INSTALL_PATH}/gtest CACHE INTERNAL "")
ExternalProject_Add(gtest
    URL ${GTEST_DOWNLOAD_URL}
    CMAKE_ARGS -DBUILD_GTEST=ON -DBUILD_GMOCK=ON -DCMAKE_INSTALL_PREFIX=${GTEST_ROOT}
    INSTALL_COMMAND make install
)

list(APPEND GLOBAL_THIRDPARTY_LIB_ARGS "-DGTEST_ROOT:PATH=${GTEST_ROOT}")
unset(GTEST_DOWNLOAD_URL)
unset(GTEST_ROOT)

下面的代码位于我的ExternalGoogleTest.cmake模块中,该模块由第三方库的CMakeLists.txt包含:

代码语言:javascript
复制
set_directory_properties(PROPERTIES EP_BASE ${CMAKE_BINARY_DIR}/ThirdParty)
get_directory_property(THIRDPARTY_BASE_PATH EP_BASE)

set(THIRDPARTY_INSTALL_PATH ${THIRDPARTY_BASE_PATH}/Install)
set(GTEST_VERSION 1.8.0)

include(ExternalProject)
include(ExternalGoogleTest)

您自己的项目(依赖于外部库)也需要一个CMake模块来将其构建为ExternalProject。它看起来可以是:

代码语言:javascript
复制
ExternalProject_Add(my_project
    DEPENDS gtest whatever
    SOURCE_DIR ${CMAKE_SOURCE_DIR}/lib
    CMAKE_ARGS
        ${GLOBAL_DEFAULT_ARGS}
        ${GLOBAL_THIRDPARTY_LIB_ARGS}
        -DCMAKE_INSTALL_PREFIX=${DESIRED_INSTALL_PATH}/my_project
    BUILD_COMMAND make
)

您可以找到有关此模式这里的更多提示。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44499435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档