Compare commits
2 Commits
9371d67b00
...
b01ab5a972
Author | SHA1 | Date | |
---|---|---|---|
b01ab5a972 | |||
c72ef9cb47 |
21
CppProperties.json
Normal file
21
CppProperties.json
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"inheritEnvironments": [
|
||||
"msvc_x86"
|
||||
],
|
||||
"name": "x86-Debug",
|
||||
"includePath": [
|
||||
"${env.INCLUDE}",
|
||||
"${workspaceRoot}\\**"
|
||||
],
|
||||
"defines": [
|
||||
"WIN32",
|
||||
"_DEBUG",
|
||||
"UNICODE",
|
||||
"_UNICODE"
|
||||
],
|
||||
"intelliSenseMode": "windows-msvc-x86"
|
||||
}
|
||||
]
|
||||
}
|
@ -49,42 +49,46 @@ endif()
|
||||
|
||||
target_link_libraries(DeviceManager PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
|
||||
|
||||
set(WinDevice_INCLUDE_DIR "../WinDevice/output/include/")
|
||||
set(WinDevice_THIRD_INCLUDE_DIR "../WinDevice/output/third_lib/")
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(WinDevice_LIB_DIR "../WinDevice/output/debug/")
|
||||
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(ARCH_DIR "x64")
|
||||
else()
|
||||
set(WinDevice_LIB_DIR "../WinDevice/output/release/")
|
||||
set(ARCH_DIR "x86")
|
||||
endif()
|
||||
# 使用 find_library 查找动态库文件
|
||||
find_library(WinDevice_LIB
|
||||
NAMES WinDevice
|
||||
HINTS ${WinDevice_LIB_DIR}
|
||||
|
||||
set(WinDevice_OUTPUT "../WinDevice/output")
|
||||
message("WinDevice_OUTPUT: ${WinDevice_OUTPUT}")
|
||||
# 获取架构信息
|
||||
set(WinDevice_INCLUDE_DIR "${WinDevice_OUTPUT}/include/")
|
||||
message("WinDevice_INCLUDE_DIR: ${WinDevice_INCLUDE_DIR}")
|
||||
set(WinDevice_THIRD_INCLUDE_DIR "${WinDevice_OUTPUT}/third_lib/")
|
||||
message("WinDevice_THIRD_INCLUDE_DIR: ${WinDevice_THIRD_INCLUDE_DIR}")
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(WinDevice_LIB_DIR "${WinDevice_OUTPUT}/${ARCH_DIR}/debug/")
|
||||
else()
|
||||
set(WinDevice_LIB_DIR "${WinDevice_OUTPUT}/${ARCH_DIR}/release/")
|
||||
endif()
|
||||
message("WinDevice_LIB_DIR: ${WinDevice_LIB_DIR}")
|
||||
|
||||
message("build WinDecie in: ${CMAKE_BUILD_TYPE} mode")
|
||||
|
||||
|
||||
add_custom_target(BuildWinDevice ALL
|
||||
COMMAND ${CMAKE_COMMAND} -E echo "Starting to build WinDevice project..."
|
||||
COMMAND ${CMAKE_COMMAND} -S ../WinDevice -B ../WinDevice/build -G "Visual Studio 17 2022" -A ${ARCH_DIR} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||
COMMAND ${CMAKE_COMMAND} --build ../WinDevice/build --config ${CMAKE_BUILD_TYPE}
|
||||
COMMENT "Building WinDevice project in ${CMAKE_BUILD_TYPE} mode"
|
||||
)
|
||||
# 添加头文件目录
|
||||
# 将 DeviceManager 目标的构建依赖于 BuildWinDevice 自定义目标
|
||||
add_dependencies(DeviceManager BuildWinDevice)
|
||||
|
||||
# 添加头文件目录
|
||||
include_directories(${WinDevice_INCLUDE_DIR} ${WinDevice_THIRD_INCLUDE_DIR})
|
||||
# 将找到的库链接到你的目标
|
||||
# 使用 find_library 查找动态库文件
|
||||
find_library(WinDevice_LIB NAMES WinDevice HINTS ${WinDevice_LIB_DIR})
|
||||
# Release 模式下,链接 WinDevice 生成的库文件
|
||||
target_link_libraries(DeviceManager PRIVATE ${WinDevice_LIB})
|
||||
|
||||
# if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
# # Debug 模式下,添加 WinDevice 项目作为子项目
|
||||
# add_subdirectory(../WinDevice WinDevice)
|
||||
# # 链接WinDevice项目
|
||||
# target_include_directories(DeviceManager PRIVATE
|
||||
# ../WinDevice/src
|
||||
# include/third_lib
|
||||
# )
|
||||
# target_link_libraries(DeviceManager PRIVATE WinDevice)
|
||||
# else()
|
||||
# # Release 模式下,链接 WinDevice 生成的库文件
|
||||
# target_link_libraries(DeviceManager PRIVATE WinDevice)
|
||||
# # 在 Release 模式下,添加 WinDevice 的头文件路径
|
||||
# target_include_directories(DeviceManager PRIVATE
|
||||
# ../WinDevice/lib
|
||||
# )
|
||||
# endif()
|
||||
|
||||
|
||||
set_target_properties(DeviceManager PROPERTIES
|
||||
MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
|
||||
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
|
||||
|
@ -6,11 +6,31 @@
|
||||
"configurationType": "Debug",
|
||||
"buildRoot": "${projectDir}\\out\\build\\${name}",
|
||||
"installRoot": "${projectDir}\\out\\install\\${name}",
|
||||
"buildCommandArgs": "",
|
||||
"ctestCommandArgs": "",
|
||||
"inheritEnvironments": [ "msvc_x86" ]
|
||||
},
|
||||
{
|
||||
"name": "x86-Release",
|
||||
"generator": "Ninja",
|
||||
"configurationType": "RelWithDebInfo",
|
||||
"buildRoot": "${projectDir}\\out\\build\\${name}",
|
||||
"installRoot": "${projectDir}\\out\\install\\${name}",
|
||||
"cmakeCommandArgs": "",
|
||||
"buildCommandArgs": "",
|
||||
"ctestCommandArgs": "",
|
||||
"inheritEnvironments": [ "msvc_x86" ],
|
||||
"variables": []
|
||||
"inheritEnvironments": [ "msvc_x86" ]
|
||||
},
|
||||
{
|
||||
"name": "x64-Debug",
|
||||
"generator": "Ninja",
|
||||
"configurationType": "Debug",
|
||||
"buildRoot": "${projectDir}\\out\\build\\${name}",
|
||||
"installRoot": "${projectDir}\\out\\install\\${name}",
|
||||
"cmakeCommandArgs": "",
|
||||
"buildCommandArgs": "",
|
||||
"ctestCommandArgs": "",
|
||||
"inheritEnvironments": [ "msvc_x64_x64" ]
|
||||
}
|
||||
]
|
||||
}
|
33
DeviceManager/build.bat
Normal file
33
DeviceManager/build.bat
Normal file
@ -0,0 +1,33 @@
|
||||
@echo on
|
||||
chcp 65001
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
set arch=x64
|
||||
set build_type=Debug
|
||||
|
||||
rem 如果参数1不为空,设置架构
|
||||
if not "%~1" == "" (
|
||||
set arch=%~1
|
||||
)
|
||||
|
||||
rem 如果参数2不为空,设置构建类型
|
||||
if not "%~2" == "" (
|
||||
set build_type=%~2
|
||||
)
|
||||
|
||||
rem 删除旧的构建目录
|
||||
if exist "build" (
|
||||
rmdir "build" /s /q
|
||||
)
|
||||
|
||||
rem 创建新的构建目录并进入
|
||||
mkdir "build"
|
||||
cd build
|
||||
|
||||
rem 运行 CMake 配置命令
|
||||
cmake .. -G "Visual Studio 17 2022" -A %arch% -DCMAKE_BUILD_TYPE=%build_type%
|
||||
|
||||
rem 执行构建
|
||||
cmake --build . --config %build_type%
|
||||
|
||||
endlocal
|
@ -15,10 +15,10 @@ set(CMAKE_GENERATOR_TOOLSET "v143")
|
||||
if (NOT DEFINED CMAKE_GENERATOR_PLATFORM)
|
||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(CMAKE_GENERATOR_PLATFORM x64)
|
||||
else()
|
||||
else ()
|
||||
set(CMAKE_GENERATOR_PLATFORM x86)
|
||||
endif()
|
||||
endif()
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
# 设置C++标准
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
@ -37,8 +37,8 @@ if (ENABLE_UTF8_SOURCE)
|
||||
elseif (CMAKE_COMPILER_IS_GNUCXX)
|
||||
# 设置MinGW编译器的UTF-8源码编码选项
|
||||
add_compile_options("-fexec-charset=UTF-8" "-finput-charset=UTF-8")
|
||||
endif()
|
||||
endif()
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
# DirectX目录
|
||||
set(Windows_Kits_DIR "C:\\Program Files (x86)\\Windows Kits\\10")
|
||||
@ -46,64 +46,63 @@ set(Windows_Kits_Version "10.0.19041.0")
|
||||
set(Windows_Kits_UM_DIR "${Windows_Kits_DIR}\\Include\\${Windows_Kits_Version}\\um")
|
||||
set(Windows_Kits_SHARED_DIR "${Windows_Kits_DIR}\\Include\\${Windows_Kits_Version}\\shared")
|
||||
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
# 64-bit 架构
|
||||
set(CMAKE_LIBRARY_ARCHITECTURE x64)
|
||||
set(DirectX_SDK_LIB_DIR "${Windows_Kits_DIR}\\Lib\\${Windows_Kits_Version}\\um\\x64")
|
||||
else()
|
||||
else ()
|
||||
# 32-bit 架构
|
||||
set(CMAKE_LIBRARY_ARCHITECTURE x86)
|
||||
set(DirectX_SDK_LIB_DIR "${Windows_Kits_DIR}\\Lib\\${Windows_Kits_Version}\\um\\x86")
|
||||
endif()
|
||||
endif ()
|
||||
# 获取所有 DirectX 相关的库文件
|
||||
file(GLOB DirectX_LIBS
|
||||
"${DirectX_SDK_LIB_DIR}/d3d9.lib"
|
||||
"${DirectX_SDK_LIB_DIR}/d3d10.lib"
|
||||
"${DirectX_SDK_LIB_DIR}/d3d11.lib"
|
||||
"${DirectX_SDK_LIB_DIR}/d3d12.lib"
|
||||
"${DirectX_SDK_LIB_DIR}/dxgi.lib"
|
||||
"${DirectX_SDK_LIB_DIR}/ddraw.lib"
|
||||
)
|
||||
"${DirectX_SDK_LIB_DIR}/d3d9.lib"
|
||||
"${DirectX_SDK_LIB_DIR}/d3d10.lib"
|
||||
"${DirectX_SDK_LIB_DIR}/d3d11.lib"
|
||||
"${DirectX_SDK_LIB_DIR}/d3d12.lib"
|
||||
"${DirectX_SDK_LIB_DIR}/dxgi.lib"
|
||||
"${DirectX_SDK_LIB_DIR}/ddraw.lib"
|
||||
)
|
||||
|
||||
# 使用通配符自动列举源文件
|
||||
file(GLOB_RECURSE SOURCE_FILES "./src/*")
|
||||
set(Third_Include_DIR "include/third_lib/")
|
||||
# 添加功能模块的源文件
|
||||
add_library(WinDevice SHARED
|
||||
${SOURCE_FILES}
|
||||
)
|
||||
${SOURCE_FILES}
|
||||
)
|
||||
# 设置WinDevice库的包含目录
|
||||
target_include_directories(WinDevice
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src>
|
||||
PRIVATE
|
||||
${Windows_Kits_UM_DIR}
|
||||
${Windows_Kits_SHARED_DIR}
|
||||
${Third_Include_DIR}
|
||||
)
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src>
|
||||
PRIVATE
|
||||
${Windows_Kits_UM_DIR}
|
||||
${Windows_Kits_SHARED_DIR}
|
||||
${Third_Include_DIR}
|
||||
)
|
||||
# 链接 d3d 的 lib
|
||||
target_link_libraries(WinDevice PRIVATE ${DirectX_LIBS})
|
||||
|
||||
# 创建 output 目录
|
||||
set(OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/output)
|
||||
set(OUTPUT_DIR ${CMAKE_SOURCE_DIR}/output)
|
||||
# 获取架构信息
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(ARCH_DIR "x64")
|
||||
else()
|
||||
else ()
|
||||
set(ARCH_DIR "x86")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
# 创建架构特定的输出目录
|
||||
file(MAKE_DIRECTORY ${OUTPUT_DIR}/${ARCH_DIR})
|
||||
set_target_properties(WinDevice PROPERTIES
|
||||
ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIR}/${ARCH_DIR}/debug"
|
||||
LIBRARY_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIR}/${ARCH_DIR}/debug"
|
||||
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIR}/${ARCH_DIR}/debug"
|
||||
ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIR}/${ARCH_DIR}/debug"
|
||||
LIBRARY_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIR}/${ARCH_DIR}/debug"
|
||||
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIR}/${ARCH_DIR}/debug"
|
||||
|
||||
ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIR}/${ARCH_DIR}/release"
|
||||
LIBRARY_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIR}/${ARCH_DIR}/release"
|
||||
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIR}/${ARCH_DIR}/release"
|
||||
)
|
||||
ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIR}/${ARCH_DIR}/release"
|
||||
LIBRARY_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIR}/${ARCH_DIR}/release"
|
||||
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIR}/${ARCH_DIR}/release")
|
||||
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
# Debug 模式下的配置
|
||||
@ -112,32 +111,27 @@ if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
# 添加测试
|
||||
add_executable(WinDeviceTest "src/main.cpp" ${SOURCE_FILES})
|
||||
target_include_directories(WinDeviceTest
|
||||
PUBLIC $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src>
|
||||
PRIVATE ${Third_Include_DIR} ${Windows_Kits_UM_DIR} ${Windows_Kits_SHARED_DIR})
|
||||
PUBLIC $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src>
|
||||
PRIVATE ${Third_Include_DIR} ${Windows_Kits_UM_DIR} ${Windows_Kits_SHARED_DIR})
|
||||
target_link_libraries(WinDeviceTest PRIVATE ${DirectX_LIBS})
|
||||
set_target_properties(WinDeviceTest PROPERTIES
|
||||
ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIR}/debug"
|
||||
LIBRARY_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIR}/debug"
|
||||
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIR}/debug"
|
||||
|
||||
ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIR}/release"
|
||||
LIBRARY_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIR}/release"
|
||||
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIR}/release"
|
||||
)
|
||||
else()
|
||||
ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIR}/${ARCH_DIR}/debug"
|
||||
LIBRARY_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIR}/${ARCH_DIR}/debug"
|
||||
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIR}/${ARCH_DIR}/debug")
|
||||
else ()
|
||||
# Release 模式下的配置
|
||||
set(LIBRARY_OUTPUT_PATH "${OUTPUT_DIR}/release")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
|
||||
# 拷贝头文件到构建目录的 include 文件夹下
|
||||
file(GLOB_RECURSE EXPORTED_HEADERS ${CMAKE_SOURCE_DIR}/src/*.h)
|
||||
foreach(HEADER ${EXPORTED_HEADERS})
|
||||
foreach (HEADER ${EXPORTED_HEADERS})
|
||||
get_filename_component(HEADER_DIR ${HEADER} DIRECTORY)
|
||||
get_filename_component(HEADER_NAME ${HEADER} NAME)
|
||||
string(REPLACE "${CMAKE_SOURCE_DIR}/src/" "" HEADER_RELATIVE_PATH ${HEADER_DIR})
|
||||
file(COPY ${HEADER} DESTINATION ${OUTPUT_DIR}/include/${HEADER_RELATIVE_PATH})
|
||||
endforeach()
|
||||
endforeach ()
|
||||
|
||||
# 创建 output/third_lib 目录
|
||||
set(OUTPUT_THIRD_LIB_DIR ${OUTPUT_DIR}/third_lib)
|
||||
|
33
WinDevice/build.bat
Normal file
33
WinDevice/build.bat
Normal file
@ -0,0 +1,33 @@
|
||||
@echo on
|
||||
chcp 65001
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
set arch=x64
|
||||
set build_type=Debug
|
||||
|
||||
rem 如果参数1不为空,设置架构
|
||||
if not "%~1" == "" (
|
||||
set arch=%~1
|
||||
)
|
||||
|
||||
rem 如果参数2不为空,设置构建类型
|
||||
if not "%~2" == "" (
|
||||
set build_type=%~2
|
||||
)
|
||||
|
||||
rem 删除旧的构建目录
|
||||
if exist "build" (
|
||||
rmdir "build" /s /q
|
||||
)
|
||||
|
||||
rem 创建新的构建目录并进入
|
||||
mkdir "build"
|
||||
cd build
|
||||
|
||||
rem 运行 CMake 配置命令
|
||||
cmake .. -G "Visual Studio 17 2022" -A %arch% -DCMAKE_BUILD_TYPE=%build_type%
|
||||
|
||||
rem 执行构建
|
||||
cmake --build . --config %build_type%
|
||||
|
||||
endlocal
|
@ -1,22 +0,0 @@
|
||||
// WinDeviceDemo.cpp: 定义应用程序的入口点。
|
||||
//
|
||||
|
||||
#include "WinDeviceDemo.h"
|
||||
#include "Video/ScreenManager.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main()
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
hr = CoInitialize(nullptr);
|
||||
if (FAILED(hr)) {
|
||||
return 0;
|
||||
}
|
||||
cout << "Hello CMake." << endl;
|
||||
|
||||
ScreenManager screenManager;
|
||||
screenManager.UpdateDisplayInfo();
|
||||
CoUninitialize();
|
||||
return 0;
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
// WinDeviceDemo.h: 标准系统包含文件的包含文件
|
||||
// 或项目特定的包含文件。
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <iostream>
|
||||
|
||||
// TODO: 在此处引用程序需要的其他标头。
|
Loading…
Reference in New Issue
Block a user