我有很多内部库,我的特定团队想要迁移到 vcpkg。我的团队对 CMake 并不像我们应该的那样熟悉,我对此拥有最多的经验,但不是专家。作为额外的好处,由于过去缺乏标准的包管理器,有很多 CMake 实用程序文件通过硬编码路径在这些库之间共享。我正在尝试使用 vcpkg 使其更加模块化,但我一直在努力在
portfile.cmake
之外共享代码,这让我担心如果不利用硬编码路径或在每个端口中复制 CMake,我就无法做到这一点。
我的目标是使用某种形式的
include(name_of_script.cmake)
或类似的形式来利用这些文件。我已遵循 Authoring Script Ports 指南,但不确定这是正确的方法。假设像这样的基本端口:
vcpkg.json
{
"name": "cmake-utilities",
"version": "1.0.0"
}
portfile.cmake
file(INSTALL
"${CMAKE_CURRENT_LIST_DIR}/some_utility.cmake"
DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
set(VCPKG_POLICY_CMAKE_HELPER_PORT enabled)
和
some_utility.cmake
function(some_utility)
message("something useful")
endfunction()
我可以依赖另一个端口中的
cmake-utilities
,并在该端口的some_utility()
中调用portfile.cmake
,但从那里我无法确定通过补丁将脚本包含在该端口的CMakeLists.txt
中的方法,这是我需要这些实用程序的地方。我的想法是错误的,还是这不是 vcpkg 的功能?
我不久前就想出来了,所以如果其他人需要达到同样的效果:
portfile.cmake
file(COPY "${CURRENT_INSTALLED_DIR}/share/cmake-utilities/some_utility.cmake" DESTINATION "${SOURCE_PATH}")
然后在端口的CMakeLists.txt中使用
include(some_utility.cmake)
。