gpt4 book ai didi

cmake - 只运行一次 CMake superbuild

转载 作者:行者123 更新时间:2023-12-02 02:57:39 26 4
gpt4 key购买 nike

在 CMake super 构建中,最好是第一次运行依赖构建和项目构建,然后再也不运行(除非需要)。 optionsset 的问题是我还没有找到设置初始值然后覆盖它的方法。

顶级 CMakeLists.txt

if( NOT DEFINED USE_SUPERBUILD )
set( USE_SUPERBUILD on CACHE BOOL "Set the superbuild to run once" )
else()
set( USE_SUPERBUILD ${USE_SUPERBUILD} CACHE BOOL "Set the superbuild to run once" FORCE )
message( "Forcing USE_SUPERBUILD AFTER: ${USE_SUPERBUILD}" )
endif()

super 构建.cmake

ExternalProject_Add( my_proj
DEPENDS ${MYPROJ_DEPENDENCIES}
SOURCE_DIR ${PROJECT_SOURCE_DIR}
CMAKE_ARGS -DUSE_SUPERBUILD:BOOL=off ${EXTRA_CMAKE_ARGS}
INSTALL_COMMAND ""
BINARY_DIR ${INSTALL_DIR} )

运行它

Forcing USE_SUPERBUILD AFTER: off

CMakeCache.txt

//Set the superbuild to run once
USE_SUPERBUILD:BOOL=on

当 super 构建结束时,它使用 USE_SUPERBUILD=off 调用这个脚本,它应该存储这个值。出于某种原因,即使它到达 else() block 并设置 offCMakeCache.txt 仍然包含 on。所以这里的问题显然是 ExternalProject_add 没有调用构建,因此它在您开始时使用 CMAKE_BINARY_DIR 的根目录。有没有办法让 ExternalProject_add 的工作方式与调用 cmake -DUSE_SUPERBUILD=off ../project_source_folder 相同?

最佳答案

将我的评论变成答案

我只想否定你的变量意义。只运行一次 superbuild 我会这样做:

superbuild.cmake

if (SKIP_SUPERBUILD) 
return()
endif()

[...]

# superbuild run finished, don't run again
set(SKIP_SUPERBUILD ON CACHE BOOL "Set to skip superbuild")

引用

关于cmake - 只运行一次 CMake superbuild,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48339178/

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