我在一个需要密码提示的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:
如何让Ninja允许我输入密码?
以下是我采取的步骤和问题的背景。
我创建了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
。
提前感谢您的帮助。
答案 0 :(得分:1)
您仍然可以将ssh与具有密码的私钥一起使用。使用ssh-agent
和ssh-add
之类的内容只需为当前shell输入一次密码(即在启动构建之前),然后您的构建将不会要求任何密码。
如果您无法使用https并需要输入密码,则可以尝试在调用USES_TERMINAL_...
时添加各种download_project()
选项。我认为USES_TERMINAL_DOWNLOAD
和USES_TERMINAL_UPDATE
应该是你所需要的。这些选项记录在ExternalProject
模块中,download_project()
传递了它无法识别到ExternalProject_Add()
的基础调用的所有选项。文档说明这使Ninja能够访问终端,因此您可能会有机会输入密码。
为每次构建输入密码很快就会变得令人厌烦,这使得自动化CI构建非常困难。我强烈建议您考虑SSH替代方案,它通常与CI系统很好地集成,并且对于日常开发来说更方便。