1

经过一番苦恼,我已经成功地安排我的 CMake 项目通过 ExternalProject 使用一些库。我cmake,我make,它起作用了——生活是美好的。

但是,如果我make再次执行,它会为外部项目执行更新和安装步骤。我绝对希望这种情况发生。我该如何防止这种情况?

4

2 回答 2

1

虽然您在自己的答案中提出的方式具有相同的效果,但您可能想要使用的实际选项是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]
于 2020-11-26T10:28:30.330 回答
0

一种方法是为您的库的外部项目设置UPDATE_COMMAND"",即:

ExternalProject_Add(the_external_library_proj_name
    # all sorts of settings here
    # etc. etc.
    # ...
    UPDATE_COMMAND ""
)

在你的CMakeLists.txt. 这意味着您可能无法通过 CMake 更新外部项目,而必须手动进行,或干净地重建所有内容等。

于 2018-08-03T14:43:35.733 回答