Windows通用的C/C++工程CMakeLists
普通程序
控制台程序
txt
cmake_minimum_required(VERSION 3.15)
project(HideProc LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
file(GLOB SOURCES "src/*.cpp")
# 可执行文件
add_executable(${PROJECT_NAME} ${SOURCES})
# 目标链接库
target_link_libraries(${PROJECT_NAME} PRIVATE
kernel32.lib
user32.lib
)
# Windows通用定义
target_compile_definitions(${PROJECT_NAME} PRIVATE
UNICODE
_UNICODE
_WIN32_WINNT=0x0A00
)
# 通用编译选项
target_compile_options(${PROJECT_NAME} PRIVATE
/W4
/EHsc
/source-charset:utf-8
)
# Debug配置特定的编译选项
target_compile_options(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:/MDd>"
"$<$<CONFIG:Debug>:/Od>"
"$<$<CONFIG:Debug>:/Zi>"
"$<$<CONFIG:Debug>:/D_DEBUG>"
)
# Release配置特定的编译选项
target_compile_options(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Release>:/MD>"
"$<$<CONFIG:Release>:/O2>"
"$<$<CONFIG:Release>:/DNDEBUG>"
)
# 链接选项
target_link_options(${PROJECT_NAME} PRIVATE
/SUBSYSTEM:CONSOLE
"$<$<CONFIG:Debug>:/DEBUG>"
"$<$<CONFIG:Release>:/OPT:REF>"
"$<$<CONFIG:Release>:/OPT:ICF>"
)
# 设置输出目录(直接放在build下)
set_target_properties(${PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/Debug"
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/Release"
WIN32_EXECUTABLE TRUE
)
GUI程序
动态链接库
txt
cmake_minimum_required(VERSION 3.23)
project(HookIAT)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
file(GLOB SOURCES "src/*.cpp") # 假设源文件在 src 目录下
# 修改此处:创建动态链接库
add_library(${PROJECT_NAME} SHARED ${SOURCES})
# 目标链接库
target_link_libraries(${PROJECT_NAME} PRIVATE
kernel32.lib
user32.lib
)
# Windows通用定义
target_compile_definitions(${PROJECT_NAME} PRIVATE
UNICODE
_UNICODE
_WIN32_WINNT=0x0A00
# 通常 DLL 项目会定义 _WINDLL
_WINDLL
)
# 通用编译选项
target_compile_options(${PROJECT_NAME} PRIVATE
/W4
/EHsc
/source-charset:utf-8
)
# Debug配置特定的编译选项
target_compile_options(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:/MDd>"
"$<$<CONFIG:Debug>:/Od>"
"$<$<CONFIG:Debug>:/Zi>"
"$<$<CONFIG:Debug>:/D_DEBUG>"
)
# Release配置特定的编译选项
target_compile_options(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Release>:/MD>"
"$<$<CONFIG:Release>:/O2>"
"$<$<CONFIG:Release>:/DNDEBUG>"
)
# 链接选项
target_link_options(${PROJECT_NAME} PRIVATE
# 对于 DLL,通常使用 WINDOWS 子系统
/SUBSYSTEM:WINDOWS
/DLL
"$<$<CONFIG:Debug>:/DEBUG>"
"$<$<CONFIG:Release>:/OPT:REF>"
"$<$<CONFIG:Release>:/OPT:ICF>"
)
# 设置输出目录(直接放在build下)
set_target_properties(${PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/Debug"
LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/Debug" # DLL 输出目录
ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/Debug" # 导入库输出目录
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/Release"
LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/Release" # DLL 输出目录
ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/Release" # 导入库输出目录
# 移除 WIN32_EXECUTABLE 属性,因为这不是可执行文件
# WIN32_EXECUTABLE TRUE
)
驱动程序
cpp