标签: vcpkg

带有工具链文件和 cmake_policy 的 CMAKE

我遇到了先有鸡还是先有蛋的情况。我正在使用 vcpkg,这需要我从命令行设置 cmake 工具链文件。但我还有一些cmake_policy语句需要在工具链文件之前在 CMakeLists.txt 中设置。

以下是 cmake 的调用方式:

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-linux ..
Run Code Online (Sandbox Code Playgroud)

但该项目使用了一些包,需要立即执行以下两个策略CMAKE_MINIMUM_REQUIRED

CMAKE_POLICY ( SET CMP0003 NEW ) # libs linked via full path
CMAKE_POLICY ( SET CMP0011 NEW ) # push/pop instead of no_policy_scope
Run Code Online (Sandbox Code Playgroud)

我的问题: 有没有办法从内部指定工具链CMakeLists.txt——大概是在设置两个 cmake 策略之后立即指定——而不是在命令行?

我收到的我想解决的警告是:

CMake Warning (dev) at vcpkg/scripts/buildsystems/vcpkg.cmake:221 (_add_executable):
  Policy CMP0003 should be set before this line.  Add code such as
    if(COMMAND cmake_policy)
      cmake_policy(SET CMP0003 NEW)
    endif(COMMAND cmake_policy)
Run Code Online (Sandbox Code Playgroud)

cmake vcpkg

3
推荐指数
1
解决办法
1588
查看次数

CMake 和 vcpkg 找不到 GLFW 目录

在 VS2017 中使用 CMake 时,我一直无法弄清楚如何让 CMake 找到并设置正确的 GLFW CMake 常量。任何帮助将不胜感激 :)。

我是glfw3通过微软的vcpkg工具下载的。我已经检查过文件确实存在于vcpkg将它们放入 ( ~\vcpkg\installed\x86-windows\include)的目录中。我CMakeSettings.json根据他们的文档在这里设置了我的。我使用该教程作为正确设置 GLFW 的基础。

然后我用它find_package(glfw3 REQUIRED)来查找glfw3图书馆。这不会吐出任何错误。实际上CMakeLists.txt根本没有抱怨。它在编译阶段抱怨。

之后,我将glfw3with添加target_link_libraries(exe ${GLFW3_LIBRARIES})到可执行文件中。

然后当我尝试构建一个简单的示例(包括头文件)时,编译失败,因为它找不到GLFW/glfw3.h.

来自 MSVC 的错误:

fatal error C1083: Cannot open include file: 'GLFW/glfw3.h': No such file or directory 
Run Code Online (Sandbox Code Playgroud)

这是我CMakeLists.txt的补充参考:

cmake_minimum_required(VERSION 3.7)
project(learn-opengl)
find_package(glfw3 REQUIRED)

add_executable(learn-opengl main.cpp)
target_link_libraries(learn-opengl ${GLFW3_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)

GLFW3_LIBRARIESglfw3Config.cmake通过窥探vcpkg安装目录中的内容(~\vcpkg\installed\x86-windows\share\glfw3) …

c++ cmake glfw visual-studio vcpkg

2
推荐指数
1
解决办法
3847
查看次数

使用 vcpkg 安装在 c++ 中运行嵌入式 Python

我不明白如何通过 vcpkg 安装 python。我的 CMakesLists 文件是:

cmake_minimum_required(VERSION 3.8)

if(NOT DEFINED CMAKE_TOOLCHAIN_FILE)
set(CMAKE_TOOLCHAIN_FILE "./vcpkg/scripts/buildsystems/vcpkg.cmake"
    CACHE STRING "")
endif()

project(test)

find_package(Python3 COMPONENTS Development REQUIRED)

add_executable(test test.cpp)
target_link_libraries(test PRIVATE Python3::Python)
Run Code Online (Sandbox Code Playgroud)

c++文件直接取自https://docs.python.org/3/extending/embedding.html#very-high-level-embedding

一切编译和链接都没有错误,但在执行时会出现以下错误:

Python path configuration:
  PYTHONHOME = (not set)
  PYTHONPATH = (not set)
  program name = 'C:\Users\smith\OneDrive\Desktop\OSU\vcpkg-python-test\build\Debug\test.exe'
  isolated = 0
  environment = 1
  user site = 1
  import site = 1
  sys._base_executable = 'C:\\Users\\smith\\OneDrive\\Desktop\\OSU\\vcpkg-python-test\\build\\Debug\\test.exe'
  sys.base_prefix = ''
  sys.base_exec_prefix = ''
  sys.platlibdir = 'lib'
  sys.executable = 'C:\\Users\\smith\\OneDrive\\Desktop\\OSU\\vcpkg-python-test\\build\\Debug\\test.exe'      
  sys.prefix = ''
  sys.exec_prefix = '' …
Run Code Online (Sandbox Code Playgroud)

c++ python vcpkg

2
推荐指数
1
解决办法
1565
查看次数

使用清单模式时如何更新对特定 git 提交的依赖关系?

我有一个使用 vcpkg 来管理其依赖项的 cmake 项目。vcpkg 用于“清单模式”。这意味着我的依赖项是在项目根目录中的 vcpkg.json 中指定的:

{
    "name": "myproject",
    "version-string": "1.0.0",
    "builtin-baseline": "232704deb708fc866905af170b63c1a9cb821dbc",
    "dependencies": [
        {
          "name" : "imgui",
          "default-features": true,
          "features" : ["docking-experimental"]
        },
        "magnum",
        {
          "name" : "magnum-integration",        
          "default-features": false,
          "features" : ["imgui"]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

"builtin-baseline"字段包含 git SHA-1,标识我自己私人维护的 vcpkg 存储库中的提交。

例如,magnum依赖项配置为使用最新的“基线”版本。这意味着如果您转到 vcpkg 的安装位置,则会有一个文件 versions/baseline.json,其中确定了基线。

vcpkg 有一个(复杂且不直观的)机制来将某些依赖项固定到旧版本。但是,我找不到如何修改 vcpkg 安装的结构化方法,因此它将从 git 存储库安装不同的版本。vcpkg“覆盖端口”功能在清单模式下不起作用。

理想情况下,vcpkg 允许我做一些简单的事情,例如:

    "magnum",
        {
          "git-commit" : "dagfaghsfdg",
          "name" : "magnum-integration",        
          "default-features": false,
          "features" : ["imgui"]
        }
Run Code Online (Sandbox Code Playgroud)

那么如何配置 vcpkg 以使用某个依赖项的 git 提交(在清单模式下)?

vcpkg

2
推荐指数
1
解决办法
2194
查看次数

vcpkg安装包时编译失败如何编辑包文件?

我正在为一些下载依赖项的项目安装依赖项vcpkg(该项目是 Hyperledger Iroha,但这并不重要)。不幸的是,当使用我的编译器(g++ 12.1.0)编译依赖项时,其中一个包(abseil)无法编译。

\n

它不编译的原因很容易在代码中修复 - 只需更改一行。

\n

该线由cmake

\n
CMake Error at scripts/cmake/vcpkg_execute_build_process.cmake:146 (message):\n    Command failed: /usr/bin/cmake --build . --config Debug --target install -- -v -j13\n    Working Directory: /home/agh/Pulpit/blockchain/internship2022/iroha/vcpkg-build/buildtrees/abseil/x64-linux-dbg\n    See logs for more information:\n      /home/agh/Pulpit/blockchain/internship2022/iroha/vcpkg-build/buildtrees/abseil/install-x64-linux-dbg-out.log\n
Run Code Online (Sandbox Code Playgroud)\n

错误是:

\n
/home/agh/Pulpit/blockchain/internship2022/iroha/vcpkg-build/buildtrees/abseil/src/ca9688e9f6-e4cda1d679.clean/absl/debugging/failure_signal_handler.cc:139:32: error: no matching function for call to \xe2\x80\x98max(long int, int)\xe2\x80\x99\n  139 |   size_t stack_size = (std::max(SIGSTKSZ, 65536) + page_mask) & ~page_mask;\n      |                        ~~~~~~~~^~~~~~~~~~~~~~~~~\nIn file included from /usr/include/c++/12.1.0/algorithm:60,\n
Run Code Online (Sandbox Code Playgroud)\n

原因很容易修复 - 我只需要更改一行即可解决此问题。\n不幸的是,当我更改代码行并重新运行后:

\n
vcpkg install abseil\n …
Run Code Online (Sandbox Code Playgroud)

c++ dependencies package-managers cmake vcpkg

2
推荐指数
1
解决办法
1393
查看次数

C++ VSCode 说它无法打开源文件,而实际上它可以

我可以毫无问题地运行和编译,但是 VSCode Intellisense 说它无法打开源文件 boost/asio.hpp (即使它显然可以)并且一直将其标记为错误,我想知道它为什么这样做它以及如何修复它

我有以下目录:

root/
  include/
    atr_include.hpp
    user_interface.hpp
  src/
    user_interface.cpp
    CMakeList.txt
  main.cpp
  CMakeList.txt
Run Code Online (Sandbox Code Playgroud)

使用 CMakeList.txt:

root/
  include/
    atr_include.hpp
    user_interface.hpp
  src/
    user_interface.cpp
    CMakeList.txt
  main.cpp
  CMakeList.txt
Run Code Online (Sandbox Code Playgroud)

src / CMakeList:

#CMake minimum version
cmake_minimum_required(VERSION 3.0.0)


#C++ Standard version
set(CMAKE_CXX_STANDARD 20)

### Searches for the VCPKG
if(DEFINED ENV{VCPKG_ROOT})
    set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake")
endif()

project(main LANGUAGES CXX VERSION 0.1.0 )

find_package(Boost COMPONENTS system json REQUIRED)

add_executable(${PROJECT_NAME} main.cpp)

include_directories(include)
link_directories(src)
add_subdirectory(src)
link_libraries(atr_lib)

if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
    link_libraries(${PROJECT_NAME} ${Boost_LIBRARIES})
endif()

if(MSVC OR MSYS OR MINGW)
    target_link_libraries(${PROJECT_NAME} ws2_32)
endif() …
Run Code Online (Sandbox Code Playgroud)

c++ cmake boost-asio visual-studio-code vcpkg

2
推荐指数
1
解决办法
6389
查看次数

如何使用关键字签名在 CMake 上链接 opengl 库

我以前将 Visual Studio 与 NuGet 一起用于所有包。现在我改为 CMake。

现在我使用vcpkg来管理库。

但是,我需要 OpenGL

Cmake 链接 freeglut、glew、glm、libpng、zlib 的命令由 vcpkg 提供。但不是 OpenGL。

cmake_minimum_required(VERSION 3.0)
project(little_plane)

set(CMAKE_CXX_STANDARD 14)

add_executable(little_plane main.cpp)

# ./vcpkg install freeglut
find_package(GLUT REQUIRED)
target_link_libraries(little_plane PRIVATE GLUT::GLUT)


## ./vcpkg install glew
#find_package(GLEW REQUIRED)
#target_link_libraries(little_plane PRIVATE GLEW::GLEW)

#
# glm
find_package(glm CONFIG REQUIRED)
target_link_libraries(little_plane PRIVATE glm)

# ./vcpkg install libpng
find_package(PNG REQUIRED)
target_link_libraries(little_plane PRIVATE PNG::PNG)
##

find_package(ZLIB REQUIRED)
target_link_libraries(little_plane PRIVATE ZLIB::ZLIB)

find_package(OpenGL REQUIRED)

if (OPENGL_FOUND)
    message("opengl found")
    message("include dir: ${OPENGL_INCLUDE_DIR}")
    message("link libraries: ${OPENGL_gl_LIBRARY}") …
Run Code Online (Sandbox Code Playgroud)

c++ opengl cmake vcpkg

1
推荐指数
1
解决办法
2247
查看次数

如何在cmake中从vcpkg导入包?

当我时vcpkg install simdjson,它返回:

The package simdjson:x64-linux provides CMake targets:

    find_package(simdjson CONFIG REQUIRED)
    target_link_libraries(main PRIVATE simdjson::simdjson simdjson::simdjson-flags simdjson::simdjson-headers)
Run Code Online (Sandbox Code Playgroud)

所以我添加

    find_package(simdjson CONFIG REQUIRED)
    target_link_libraries(main PRIVATE simdjson::simdjson simdjson::simdjson-flags simdjson::simdjson-headers)
Run Code Online (Sandbox Code Playgroud)

使用CMakeLists.txt该包simdjson

但当我这样做时vcpkg install redis-plus-plus[cxx17],它什么也没返回。我应该怎么做才能cmake使用这个包?

c++ cmake vcpkg

1
推荐指数
1
解决办法
1936
查看次数

C++ - 使用 vcpkg 加速安装

我是 C++ 新手,需要下载一个包,所以我想我会使用 vcpkg。问题是 vcpkg 比我预期的要慢。这是我的语法:

vcpkg install <PACKAGE>
Run Code Online (Sandbox Code Playgroud)

vcpkg 需要很多时间,这让我想知道是否有一个标志可以加快vcpkg 下载速度。

c++ vcpkg

0
推荐指数
1
解决办法
831
查看次数

apache arrow 的问题:错误 C2668:'arrow::internal::launder':对重载函数的不明确调用

我开始使用 Apache arrow。我是通过vcpkg安装的。一切都很好,直到我将安装的 arrow 更新到 6.0.1。我使用 powershell 控制台中的以下命令安装了它:

vcpkg install arrow:x64-windows-static
Run Code Online (Sandbox Code Playgroud)

它已成功安装,我看到了成功消息(不知何故):

The package arrow provides CMake targets:
        find_package(arrow CONFIG REQUIRED)
        target_link_libraries(main PRIVATE re2::re2 arrow_static parquet_static arrow_bundled_dependencies)
Run Code Online (Sandbox Code Playgroud)

我有一个名为csv_column_test.cpp. 然后我注释掉了该文件的所有内容,除了这两行:

#define ARROW_STATIC
#include <arrow/api.h>
Run Code Online (Sandbox Code Playgroud)

并尝试编译它。我不断遇到这个错误:

error C2668: 'arrow::internal::launder': ambiguous call to overloaded function
Run Code Online (Sandbox Code Playgroud)

我想念什么?如何让事情再次运转?

谢谢。

这是完整的错误日志:

>------ Build All started: Project: StockPredII, Configuration: x64-Debug (default) ------
  [1/2] Building CXX object splib\CMakeFiles\splib_test.dir\sparrow\csv_column_test.cpp.obj
  FAILED: splib/CMakeFiles/splib_test.dir/sparrow/csv_column_test.cpp.obj 
  C:\PROGRA~2\MICROS~4\2019\PROFES~1\VC\Tools\MSVC\1429~1.301\bin\Hostx64\x64\cl.exe  /nologo /TP -DARROW_DEPENDENCY_SOURCE=VCPKG -D_SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING -I\Catch2\include -I..\..\..\splib -IE:\sandbox\vcpkg\installed\x64-windows-static\include /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MTd /Zi /Ob0 …
Run Code Online (Sandbox Code Playgroud)

c++ cmake vcpkg apache-arrow

0
推荐指数
1
解决办法
187
查看次数