我正在为我的项目测试 vcpkg,但遇到了 cmake-gui 的问题
我已经安装了 vcpkg,在 vcpkg 的帮助下安装了 Boost 库。当我通过命令行编译时,一切正常。我使用命令
cmake .. -DCMAKE_TOOLCHAIN_FILE=D:/repos/vcpkg/scripts/buildsystems/vcpkg.cmake -G"Visual Studio 15 Win64"
Run Code Online (Sandbox Code Playgroud)
但问题是当我想使用 cmake-gui 生成构建文件时。它报告未找到 Boost。
我试着添加
set(CMAKE_TOOLCHAIN_FILE "D:/repos/vcpkg/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Path for vcpkg.cmake")
Run Code Online (Sandbox Code Playgroud)
到我的 Makefile 的顶部,但它没有帮助。我也尝试了 add_definitions 和 add_compile_options,但没有成功。
那么我应该在我的 cmake 文件中添加什么才能将 cmake-gui 与 vcpkg 一起使用?
我的目标与几个使用TARGET_LINK_LIBRARIES
withPUBLIC
关键字的库链接,INSTALL
命令看起来像INSTALL(TARGETS foo DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
. 我想以某种方式强制 cmake 包含我链接的所有(最好不包括系统库)库(仅限 SO)以包含在安装过程中。我试过 EXPORT 关键字,但看起来它只影响我在项目中构建的库,并标记为与库相同EXPORT
的foo
库。
是否可以?
EDIT001:可能影响答案的附加信息。我正在使用vcpkg来管理第三方。所以TARGET_LINK_LIBRARIES
看起来像
TARGET_LINK_LIBRARIES(foo PUBLIC
GTest::GTest
GTest::Main
${GOOGLE_MOCK}
event
${THRIFT_LIBRARIES}
${Boost_LIBRARIES}
lzo2
sqlite3
${ZeroMQ_LIBRARY}
gRPC::grpc
gRPC::grpc++
xml2
stdc++fs
bfd
-l:libisal.so.2
sgutils2
pthread
uuid
rt
)
Run Code Online (Sandbox Code Playgroud)
所以,本质上我想要实现的是获取所有这些被宏化的库vcpkg
,像${THRIFT_LIBRARIES}, ${Boost_LIBRARIES} and gRPC::grpc
等等
我试图只构建包的发布版本,因为创建调试版本需要太长时间/太多空间。Vcpkg 文档指出:
在三元组中添加 set(VCPKG_BUILD_TYPE release):将导致大多数端口只构建发布
在终端运行时set(VCPKG_BUILD_TYPE release)
我得到
syntax error near unexpected token 'VCPKG_BUILD_TYPE'
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
我通过 vcpkg 安装了 protobuf vcpkg install protobuf:x64-windows
。显然它安装了最新版本(3.6.1)。对于我需要版本<=3.5.1的项目。有没有办法使用 vcpkg 安装它?现在我只是使用 cmake 构建了 3.5.1,但是项目正在使用 vcpkg 的路径寻找 protobuf,我真的不知道是否允许我更改代码。
使用 vcpkg 安装软件包后,将显示帮助文本,例如...
The package fmt:x64-windows provides CMake targets:
find_package(fmt CONFIG REQUIRED)
target_link_libraries(main PRIVATE fmt::fmt fmt::fmt-header-only)
Run Code Online (Sandbox Code Playgroud)
...用于将它们与 CMake 一起使用所需的不同说明。如果您将来想回忆它而没有写下来,您从哪里获得这些信息?一些图书馆有比上述更多的指令。
我在 Windows 10 上使用 Visual Studio 2019 并尝试在 C++ 中使用 GTK 并使用 vcpkg 安装它。
我已经vcpkg
根据GTK的指南安装了GTK。我使用Visual Studio 2019,它是能够编译和运行示例程序在这里,但有关主题和图标的问题。根据安装指南,在构建和分发应用程序部分下,必须执行一些操作才能使主题和图标正常工作。
我首先下载指南建议的 Windows 主题并将其放在一个share
目录中,然后我settings.ini
在一个etc
目录中创建了一个文件。它说将它放在“安装目录”中,我认为这是 Visual Studio 为程序放置 exe 的地方。我在构建和发布、源文件、顶级项目目录中都尝试过它 - 都没有成功(我确实确保它面向 x64)。
以防万一,我也尝试将它们放置在安装 vcpkg 的位置以及安装 vcpkg 的 gtk 位置。没运气。当程序运行时,我收到警告
(gtkExample0.exe:16772): Gtk-WARNING **: Could not find the icon 'window-minimize-symbolic-ltr'. The 'hicolor' theme
was not found either, perhaps you need to install it.
You can get a copy from:
http://icon-theme.freedesktop.org/releases …
Run Code Online (Sandbox Code Playgroud) 我很想使用 vcpkg 来管理我们与第三方库的依赖关系,但我不确定这在我们的环境中如何工作。我们的解决方案中有数百个项目,并随着时间的推移发布软件的新版本。这是软件开发中很常见的情况,但我不明白vcpkg如何有效工作。
全局安装将不起作用。我们需要将我们的版本与特定版本的软件包联系起来。所以我们只能使用清单。在清单中,您指定一个“内置基线”,这是将项目的构建固定到某个时间点的好方法,并且可以保证不同包之间的依赖关系是正确的。
对于一个项目来说这一切都很棒。一个人如何管理数百个项目?
使用 CMake 会让这一切变得更容易吗?
我想使用这个库见:https : //github.com/jtv/libpqxx
我决定安装这个库管理器 vcpkg 见:https : //github.com/microsoft/vcpkg
我将 CMake 选项设置为“CMake 项目应该使用:”-DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/vcpkg/scripts/buildsystems/vcpkg.cmake”
这是错误:
"C:\Program Files\JetBrains\CLion 2019.1.4\bin\cmake\win\bin\cmake.exe" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/vcpkg/scripts /buildsystems/vcpkg.cmake -G "CodeBlocks - MinGW Makefiles" C:\Users \Vaio\CLionProjects\untitled
CMake Warning at C:/vcpkg/vcpkg/scripts/buildsystems/vcpkg.cmake:68 (message):
Unable to determine target architecture, continuing without vcpkg.
Call Stack (most recent call first):
cmake-build-debug-mingw/CMakeFiles/3.14.3/CMakeSystem.cmake:6 (include)
CMakeLists.txt:2 (project)
Run Code Online (Sandbox Code Playgroud)
相应的 CMake 代码是这样的:
if(VCPKG_TARGET_TRIPLET)
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Ww][Ii][Nn]32$")
set(_VCPKG_TARGET_TRIPLET_ARCH x86)
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Xx]64$")
set(_VCPKG_TARGET_TRIPLET_ARCH x64)
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Aa][Rr][Mm]$")
set(_VCPKG_TARGET_TRIPLET_ARCH arm)
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Aa][Rr][Mm]64$")
set(_VCPKG_TARGET_TRIPLET_ARCH arm64)
else()
if(CMAKE_GENERATOR MATCHES "^Visual Studio …
Run Code Online (Sandbox Code Playgroud) 在创建 vcpkg 注册表的文档中我看到
{
"versions": [
{
"version": "2.6.3",
"port-version": 0,
"path": "$/ports/kitten/2.6.3_0"
},
{
"version": "2.6.2",
"port-version": 0,
"path": "$/ports/kitten/2.6.2_0"
}
]
}
Run Code Online (Sandbox Code Playgroud)
为什么我们需要port_version
,还不够version
?
vcpkg在Linux上默认使用GCC安装包。我看到官方文档提到了自定义三元组方法,但没有提到clang工具链。
如何指定clang和libc++作为vcpkg的默认工具链?