windows c++ 包管理 vcpkg clion
# 设置 CMake 的最低版本要求
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
#set(CMAKE_TOOLCHAIN_FILE F:/paperanddata/vcpkg-master/vcpkg-master/scripts/buildsystems/)
#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 /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 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 for more detail")
endif()
message(STATUS "----------")
# /dox/
# /libeigen/eigen/-/blob/master/cmake/
# /libeigen/eigen/-/blob/master/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 for more detail")
endif()
endif()
configure_file(config/ROOT_PATH. 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)