You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Visual Studio 2019的CMake Ninja项目中构建MFC共享库?

如何用纯CMake构建依赖MFC的C++库?

问题场景

现有C++项目结构如下:

mfc_ninja
├── CMakeLists.txt
├── source.cpp

初始CMake配置:

cmake_minimum_required(VERSION 3.19)

project(mylib)

add_definitions(-D_AFXDLL)
set(CMAKE_MFC_FLAG 2)
add_library(${PROJECT_NAME} SHARED source.cpp)

source.cpp仅包含#include <afxwin.h>,使用Visual Studio 2019构建时出现错误:

Error C1083 Cannot open include file: 'afxwin.h': No such file or directory

尝试改用FindMFC模块后,CMake输出显示未找到MFC,且REQUIRED参数未终止配置:

cmake_minimum_required(VERSION 3.19)

project(mylib)

find_package(MFC REQUIRED)
message(STATUS "MFC_FOUND: ${MFC_FOUND}")

add_library(${PROJECT_NAME} SHARED source.cpp)

输出:

1> [CMake] -- Looking for MFC
1> [CMake] -- Looking for MFC - not found
1> [CMake] -- MFC_FOUND: NO

解决方案

1. 确认Visual Studio已安装MFC组件

默认情况下Visual Studio不会自动安装MFC支持,需手动添加:

  • 打开Visual Studio Installer,选择对应VS版本的「修改」选项
  • 切换到「单个组件」标签,找到并勾选「MFC和ATL支持(x86和x64)」
  • 点击「修改」完成安装

2. 正确配置CMake脚本

使用以下CMakeLists.txt配置,可正确构建依赖MFC的共享库:

cmake_minimum_required(VERSION 3.19)

project(mylib)

# 设置MFC链接方式:2为动态链接(对应_AFXDLL宏),1为静态链接
set(CMAKE_MFC_FLAG 2)

# 查找MFC,REQUIRED会在找不到时终止CMake配置
find_package(MFC REQUIRED)

# 创建共享库目标
add_library(${PROJECT_NAME} SHARED source.cpp)

# 链接MFC依赖库,FindMFC模块会自动设置MFC_LIBRARIES变量
target_link_libraries(${PROJECT_NAME} PRIVATE ${MFC_LIBRARIES})

关键说明

  • CMAKE_MFC_FLAG必须在find_package(MFC)之前设置:该变量告诉CMake查找动态还是静态版本的MFC库,若未设置,FindMFC模块无法正确定位MFC资源。
  • 无需手动添加_AFXDLL宏:设置CMAKE_MFC_FLAG 2后,CMake会自动为目标添加_AFXDLL预定义宏,无需再用add_definitions手动添加。
  • target_link_libraries的作用:将MFC的头文件路径、库路径及依赖库自动关联到目标,解决编译时找不到afxwin.h和链接错误的问题。

内容的提问来源于stack exchange,提问作者Benjamin Buch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 04:33:14