windows c++ 包管理 vcpkg clion

29 篇文章 0 订阅

安装VCPKG

git clone https://github.com/microsoft/vcpkg
.\vcpkg\bootstrap-vcpkg.bat

使用以下命令安装您的项目所需要的库:

.\vcpkg\vcpkg install [packages to install]

您也可以使用 search 子命令来查找vcpkg中集成的库:

.\vcpkg\vcpkg search [search term]

若您希望在 Visual Studio 中使用vcpkg,请运行以下命令 (首次启动需要管理员权限)

.\vcpkg\vcpkg integrate install

在此之后,您可以创建一个非cmake项目 (或打开已有的项目)。 在您的项目中,所有已安装的库均可立即使用 #include 包含您需使用的库的头文件并无需添加额外配置。

特别地,报以下错误居然导致也不能用vcpkg安装lib:

Warning: The following VS instances are excluded because the English language pa
ck is unavailable.

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional

vcpkg 按他说的,少英文语言包,到VS2017安装向导,修改安装,点语言包,勾选英语;再去安装第三方库,发现OK了…;

镜像

set X_VCPKG_ASSET_SOURCES=x-azurl,http://106.15.181.5

加速

当前 shell 的代理
$env:HTTP_PROXY=“http://127.0.0.1:1080”

在clion 中导入用vcpkg安装的包

vcpkg安装的时候最好选择64位,比如.\vcpkg.exe install assimp --triplet x64-windows
在clion 的cmake option 中加入CMAKE_TOOLCHAIN_FILE=F:/paperanddata/vcpkg-master/vcpkg-master/scripts/buildsystems/vcpkg.cmake
在这里插入图片描述

在clion中使用msvc编译器

在这里插入图片描述

cmakelist 编写

其中assimp和tinyxml2是用vcpkg安装的包
set(Qt5_DIR "D:/QT/5.12.3/msvc2017_64/lib/cmake/Qt5")加入QT5的路径

# 设置 CMake 的最低版本要求
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
#set(CMAKE_TOOLCHAIN_FILE F:/paperanddata/vcpkg-master/vcpkg-master/scripts/buildsystems/vcpkg.cmake)


#set(BUILD_USE_64BITS on)
# 设定项目
project(UEngine VERSION 0.1)
message(STATUS "[Project] ${PROJECT_NAME}")

# 修改默认的安装路径前缀
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
  set(CMAKE_INSTALL_PREFIX ${PROJECT_SOURCE_DIR} CACHE PATH "install prefix" FORCE)
endif()

# 在 Debug 模式下自动对 dll 和 lib 文件名后边加 d,但 exe 仍然需要手动设置
set(CMAKE_DEBUG_POSTFIX d)

# 确定 C++ 版本
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)




set(Qt5_DIR "D:/QT/5.12.3/msvc2017_64/lib/cmake/Qt5")


if(MSVC)
    #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /permissive- /Zc:twoPhase-")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /permissive-")
endif()

# 将生成的 exe, dll, lib 等放置在 bin, lib 目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${PROJECT_SOURCE_DIR}/bin")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${PROJECT_SOURCE_DIR}/bin")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/lib")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${PROJECT_SOURCE_DIR}/lib")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${PROJECT_SOURCE_DIR}/lib")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/lib")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${PROJECT_SOURCE_DIR}/lib")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${PROJECT_SOURCE_DIR}/lib")

# 开启 VS 的文件夹功能
set_property(GLOBAL PROPERTY USE_FOLDERS ON)

include(FetchContent)


find_package(UCMake)
if(${UCMake_FOUND})
	message(STATUS "UCMake-0.1 found")
else()
	message(STATUS "UCMake-0.1 not found, so fetch it ...")
	FetchContent_Declare(
	  UCMake
	  GIT_REPOSITORY https://github.com/Ubpa/UCMake
	  GIT_TAG "v0.1"
	)
	FetchContent_MakeAvailable(UCMake)
	message(STATUS "UCMake-0.1 fetch done")
endif()

# 修改默认的安装路径前缀
Ubpa_InitInstallPrefix()

Ubpa_AddDep(UTemplate 0.1)
Ubpa_AddDep(UDP 0.1)
Ubpa_AddDep(UGM 0.1)
Ubpa_AddDep(UHEMesh 0.1)

Ubpa_QtInit(COMPONENTS Core Gui Widgets OpenGL)

message(STATUS "----------")
find_package(assimp  REQUIRED)
if(TARGET assimp::assimp)
	message(STATUS "assimp_FOUND: ${assimp_FOUND}")
	message(STATUS "assimp_DIR: ${assimp_DIR}")
	get_property(assimp_INTERFACE_INCLUDE_DIRECTORIES
			TARGET assimp::assimp
			PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
endif()

message(STATUS "----------")
find_package(tinyxml2  REQUIRED)
if(TARGET tinyxml2::tinyxml2)
	message(STATUS "tinyxml2_FOUND: ${tinyxml2_FOUND}")
	message(STATUS "tinyxml2_DIR: ${tinyxml2_DIR}")
endif()

message(STATUS "----------")
if(EXISTS "${PROJECT_SOURCE_DIR}/include/_deps/stb_image.h"
   AND EXISTS "${PROJECT_SOURCE_DIR}/include/_deps/stb_image_write.h")
	message(STATUS "found stb_image.h and stb_image_write.h")
else()
	message(FATAL_ERROR "not found stb_image.h or stb_image_write.h in include/_deps/\n"
		"read setup.md for more detail")
endif()

message(STATUS "----------")
if(EXISTS "${PROJECT_SOURCE_DIR}/src/App/UEngine/Resources")
else()
	message(FATAL_ERROR "not found Resources/ in src/App/UEngine/\n"
		"read setup.md for more detail")
endif()

message(STATUS "----------")
# https://eigen.tuxfamily.org/dox/TopicCMakeGuide.html
# https://gitlab.com/libeigen/eigen/-/blob/master/cmake/Eigen3Config.cmake.in
# https://gitlab.com/libeigen/eigen/-/blob/master/cmake/UseEigen3.cmake
find_package(Eigen3 3.3 NO_MODULE)
if(TARGET Eigen3::Eigen)
	message(STATUS "EIGEN3_FOUND: ${EIGEN3_FOUND}")
	message(STATUS "EIGEN3_USE_FILE: ${EIGEN3_USE_FILE}")
	message(STATUS "EIGEN3_DEFINITIONS: ${EIGEN3_DEFINITIONS}")
	message(STATUS "EIGEN3_INCLUDE_DIR: ${EIGEN3_INCLUDE_DIR}")
	message(STATUS "EIGEN3_INCLUDE_DIRS: ${EIGEN3_INCLUDE_DIRS}")
	message(STATUS "EIGEN3_ROOT_DIR: ${EIGEN3_ROOT_DIR}")
	message(STATUS "EIGEN3_VERSION_STRING: ${EIGEN3_VERSION_STRING}")
	include(${EIGEN3_USE_FILE})
else()
	message(WARNING "find_package(Eigen3 3.3 NO_MODULE) failed, so use include/_deps/Eigen/")
	if(NOT EXISTS "${PROJECT_SOURCE_DIR}/include/_deps/Eigen")
		message(FATAL_ERROR "not found Eigen/ in ${PROJECT_SOURCE_DIR}/include/_deps/\n"
			"read setup.md for more detail")
	endif()
endif()

configure_file(config/ROOT_PATH.h.in config/ROOT_PATH.h)

include_directories (
	${PROJECT_SOURCE_DIR}/include
	${PROJECT_SOURCE_DIR}/include/_deps
	${CMAKE_BINARY_DIR}/config
	# $ENV{XXX_INCLUDE_PATH}
	# ...
)

#FIND_PACKAGE(OpenMP REQUIRED)
#if(OPENMP_FOUND)
#	message("OPENMP FOUND")
#	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
#	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
#	set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
#endif()

Ubpa_AddSubDirsRec(src)

include (InstallRequiredSystemLibraries)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值