CMake Ninja Git 自签名证书颁发机构密码提示

CMake Ninja Git Self Signed Certificate Authority Password Prompts

简短版本:

我在需要密码提示的 git 存储库中使用具有外部依赖项的 CMake 和 Ninja。 (必须保护源代码)

使用 Makefile 构建时,我可以使用密码提示,一切都会继续。

Ninja 锁定时间:

-- Build files have been written to: 
/path/to/project/hello_cpp/build/sqlite3-download
[1/9] Creating directories for 'sqlite3-download'
Enter PEM pass phrase:

我的问题:

How do I get Ninja to allow me to enter the password?

长版

以下是我采取的步骤和问题的背景。

我创建了 SQLite3 CMake Library 作为如何编写 CMake 库的学习练习。

我还创建了 Hello CPP 作为构建 C++ 项目跨平台和配置项目模板的学习练习。

我设法通过 Craig Scott's DownloadProject CMake Module 获得外部依赖项。

include(DownloadProject)  
download_project(PROJ sqlite3
  GIT_REPOSITORY  "https://github.com/dexata/sqlite3-cmake.git"
  GIT_TAG         master
)
add_subdirectory(${sqlite3_SOURCE_DIR} ${sqlite3_BINARY_DIR})
target_link_libraries(helloworld_lib_target sqlite3)
get_property(sqlite3_inc_dir TARGET sqlite3 PROPERTY INCLUDE_DIRECTORIES)

我还撰写了以下对 How can I make git accept a self signed certificate?

的回答

所以我非常了解自托管的安全功能 git。我们目前的限制是我们唯一的连接是通过 https 访问我们的 git 实例。即使我们允许 ssh 访问,我们仍然有私钥有密码的安全策略,因此 Ninja 仍然需要允许交互式提示。

就像我上面说的,它适用于 Makefile,但我正在努力让它适用于 Ninja

提前感谢您的帮助。

您仍然可以使用带有密码的私钥使用 ssh。使用 ssh-agentssh-add 之类的东西,只需为当前 shell 输入一次密码(即在您启动构建之前),然后您的构建将不会要求任何密码。

如果您无法使用 https 并且需要输入密码,您可以尝试在对 download_project() 的调用中添加各种 USES_TERMINAL_... 选项。我认为 USES_TERMINAL_DOWNLOADUSES_TERMINAL_UPDATE 应该是您所需要的。这些选项记录在 ExternalProject 模块中,download_project() 将它无法识别的所有选项传递给对 ExternalProject_Add() 的基础调用。文档指出这使 Ninja 可以访问终端,因此也许您将有机会输入密码。

每次构建都必须输入密码很快就会让人厌烦,这使得自动化 CI 构建变得非常困难。我强烈建议您考虑使用 SSH 替代方案,它通常可以很好地与 CI 系统集成,并且对于日常开发来说更加方便。