gpt4 book ai didi

cmake - 如何从 cmake 中运行 cmake?

转载 作者:行者123 更新时间:2023-12-03 16:52:45 27 4
gpt4 key购买 nike

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

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

execute_process(COMMAND "cmake -GNinja ." WORKING_DIRECTORY ${mariadb-connector-c_SOURCE_DIR})

我知道这不起作用,因为下一步运行 ninja 失败了:
execute_process(COMMAND "ninja" WORKING_DIRECTORY ${mariadb-connector-c_SOURCE_DIR})

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

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

最佳答案

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

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

# 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 包含的模块第三方库:
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 也。它看起来像:
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
)

您可以找到有关此模式的更多提示 here .

关于cmake - 如何从 cmake 中运行 cmake?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44499435/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com