安装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)