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?
- 忍者 1.7.2
- cmake 3.8.2
- git 2.13.2
长版
以下是我采取的步骤和问题的背景。
我创建了 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-agent
和 ssh-add
之类的东西,只需为当前 shell 输入一次密码(即在您启动构建之前),然后您的构建将不会要求任何密码。
如果您无法使用 https 并且需要输入密码,您可以尝试在对 download_project()
的调用中添加各种 USES_TERMINAL_...
选项。我认为 USES_TERMINAL_DOWNLOAD
和 USES_TERMINAL_UPDATE
应该是您所需要的。这些选项记录在 ExternalProject
模块中,download_project()
将它无法识别的所有选项传递给对 ExternalProject_Add()
的基础调用。文档指出这使 Ninja 可以访问终端,因此也许您将有机会输入密码。
每次构建都必须输入密码很快就会让人厌烦,这使得自动化 CI 构建变得非常困难。我强烈建议您考虑使用 SSH 替代方案,它通常可以很好地与 CI 系统集成,并且对于日常开发来说更加方便。
简短版本:
我在需要密码提示的 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?
- 忍者 1.7.2
- cmake 3.8.2
- git 2.13.2
长版
以下是我采取的步骤和问题的背景。
我创建了 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-agent
和 ssh-add
之类的东西,只需为当前 shell 输入一次密码(即在您启动构建之前),然后您的构建将不会要求任何密码。
如果您无法使用 https 并且需要输入密码,您可以尝试在对 download_project()
的调用中添加各种 USES_TERMINAL_...
选项。我认为 USES_TERMINAL_DOWNLOAD
和 USES_TERMINAL_UPDATE
应该是您所需要的。这些选项记录在 ExternalProject
模块中,download_project()
将它无法识别的所有选项传递给对 ExternalProject_Add()
的基础调用。文档指出这使 Ninja 可以访问终端,因此也许您将有机会输入密码。
每次构建都必须输入密码很快就会让人厌烦,这使得自动化 CI 构建变得非常困难。我强烈建议您考虑使用 SSH 替代方案,它通常可以很好地与 CI 系统集成,并且对于日常开发来说更加方便。