经过一番苦恼,我已经成功地安排我的 CMake 项目通过 ExternalProject 使用一些库。我cmake
,我make
,它起作用了——生活是美好的。
但是,如果我make
再次执行,它会为外部项目执行更新和安装步骤。我绝对不希望这种情况发生。我该如何防止这种情况?
经过一番苦恼,我已经成功地安排我的 CMake 项目通过 ExternalProject 使用一些库。我cmake
,我make
,它起作用了——生活是美好的。
但是,如果我make
再次执行,它会为外部项目执行更新和安装步骤。我绝对不希望这种情况发生。我该如何防止这种情况?
虽然您在自己的答案中提出的方式具有相同的效果,但您可能想要使用的实际选项是UPDATE_DISCONNECTED
.
在CMake 的文档中,在更新/补丁选项部分下:
UPDATE_DISCONNECTED <bool>
启用后,此选项会导致跳过更新步骤。但是,它不会阻止下载步骤。更新步骤仍然可以作为步骤目标添加(请参阅 参考资料
ExternalProject_Add_StepTargets()
)并手动调用。
所以你的最后一件事可能如下所示:
ExternalProject_Add( external_lib
# ...
UPDATE_DISCONNECTED True
)
如果您进一步了解我引用的摘录,文档明确建议不要这样做,并建议通过目录变量控制更新行为EP_UPDATE_DISCONNECTED
,其值用作UPDATE_DISCONNECTED
.
这意味着你可以让你的ExternalProject_Add
电话没有这个UPDATE_DISCONNECTED
选项,而是像这样运行你的 CMake 命令:
$ cmake .. -DEP_UPDATE_DISCONNECTED:BOOL=True
$ cmake --build . [your_options]
一种方法是为您的库的外部项目设置UPDATE_COMMAND
为""
,即:
ExternalProject_Add(the_external_library_proj_name
# all sorts of settings here
# etc. etc.
# ...
UPDATE_COMMAND ""
)
在你的CMakeLists.txt
. 这意味着您可能无法通过 CMake 更新外部项目,而必须手动进行,或干净地重建所有内容等。