【发布时间】:2020-03-05 15:22:57
【问题描述】:
我正在编写一个 C++ 命令行工具。对于构建系统,我使用 CMake。
我的应用程序需要libsodium。它应该在 Windows 和 Linux 下编译。尤其是对于 CI/CD,它需要一种自行管理依赖关系的好方法。
第一种方法
在之前的项目中,我总是像 link 那样通过 CMake 添加所需的依赖项(让 CMake 来完成所有工作)。
我也尝试过使用 libsodium,但它有点复杂,因为钠不正式支持 CMake。 (我收到链接器错误)
第二种方法
所以我尝试了另一种方法。在寻找在 CMake 中处理依赖项的不同方法时,我发现了 Hunter。我认为这是添加依赖项的另一种巧妙方法。所以我尝试了这个:
cmake_minimum_required(VERSION 3.15.2)
include("cmake/HunterGate.cmake")
HunterGate(
URL "https://github.com/cpp-pm/hunter/archive/v0.23.244.tar.gz"
SHA1 "2c0f491fd0b80f7b09e3d21adb97237161ef9835"
)
project(someProject)
hunter_add_package(libsodium)
find_package(libsodium CONFIG REQUIRED)
...
target_link_libraries(someProject
libsodium::libsodium
)
我在使用 Hunter 时遇到的错误:
[hunter] Calculating Toolchain-SHA1
[hunter] Calculating Config-SHA1
[hunter] HUNTER_ROOT: C:/.hunter
[hunter] [ Hunter-ID: 2c0f491 | Toolchain-ID: 9e19749 | Config-ID: 711bb51 ]
[hunter] LIBSODIUM_ROOT: C:/.hunter/_Base/2c0f491/9e19749/711bb51/Install (ver.: 1.0.16-p0)
[hunter] Building libsodium
[hunter ** FATAL ERROR **] Build step failed (dir: C:/.hunter/_Base/2c0f491/9e19749/711bb51/Build/libsodium
[hunter ** FATAL ERROR **] [Directory:C:/.hunter/_Base/Download/Hunter/0.23.244/2c0f491/Unpacked/cmake/projects/libsodium]
------------------------------ ERROR -----------------------------
https://hunter.readthedocs.io/en/latest/reference/errors/error.external.build.failed.html
------------------------------------------------------------------
CMake Error at C:/.hunter/_Base/Download/Hunter/0.23.244/2c0f491/Unpacked/cmake/modules/hunter_error_page.cmake:12 (message):
Call Stack (most recent call first):
C:/.hunter/_Base/Download/Hunter/0.23.244/2c0f491/Unpacked/cmake/modules/hunter_fatal_error.cmake:20 (hunter_error_page)
C:/.hunter/_Base/Download/Hunter/0.23.244/2c0f491/Unpacked/cmake/modules/hunter_download.cmake:623 (hunter_fatal_error)
C:/.hunter/_Base/Download/Hunter/0.23.244/2c0f491/Unpacked/cmake/projects/libsodium/hunter.cmake:59 (hunter_download)
C:/.hunter/_Base/Download/Hunter/0.23.244/2c0f491/Unpacked/cmake/modules/hunter_add_package.cmake:62 (include)
CMakeLists.txt:13 (hunter_add_package)
Configuring incomplete, errors occurred!
Hunter 中的包是坏了还是我需要做一些不同的事情?
有没有人知道如何巧妙而轻松地管理这些依赖关系?我会很高兴有任何答案。即使它是一个完整的其他方法......谢谢
编辑 1:构建错误
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s: Assembler messages:
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:30: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:32: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:34: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:36: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:38: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:40: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:42: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:44: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:46: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:48: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:50: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:544: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:546: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:548: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:550: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:552: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:554: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:556: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:558: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:560: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:562: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:564: Error: invalid register for .seh_savexmm
C:\Users\SORKAL~1\AppData\Local\Temp\cclEnZwH.s:566: Error: invalid register for .seh_savexmm
【问题讨论】:
-
我没用过,不过也有柯南包管理器,官方包仓库里好像有libsodium。也许你可以用它来代替 Hunter:conan.io
标签: c++ cmake dependencies