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

如何在MSVC中构建Makefile项目并简化配置操作

在MSVC中简化Makefile项目配置的方法

以下是几个实用方案,帮你摆脱重复设置包含目录和链接器配置的繁琐:

1. 复用Makefile变量+MSVC环境初始化

先通过MSVC自带的vcvarsall.bat初始化编译环境(比如执行vcvarsall.bat x64),这样cl、link命令能自动识别系统默认的include/lib路径。然后在Makefile里把自定义路径抽成变量,方便复用和修改:

# 基础编译/链接命令(环境初始化后直接调用)
CC = cl
LINKER = link

# 可复用的通用配置
CFLAGS = /nologo /W4 /O2 $(MY_INCLUDES)
LDFLAGS = /nologo $(MY_LIBS)

# 项目专属配置(只需修改这部分)
MY_INCLUDES = /I"./src/include" /I"./thirdparty/rapidjson/include"
MY_LIBS = /LIBPATH"./lib" opengl32.lib glu32.lib
TARGET = demo.exe
SRCS = src/main.cpp src/render.cpp

# 构建规则
$(TARGET): $(SRCS)
    $(CC) $(CFLAGS) $(SRCS) /link $(LDFLAGS) /OUT:$@

clean:
    del /Q $(TARGET) *.obj

每次新项目复制这个模板,仅调整MY_INCLUDES、MY_LIBS等专属配置即可。

2. 用CMake生成MSVC兼容的构建文件

CMake可以统一管理跨平台构建配置,无需手动编写MSVC特定的Makefile语法。写好CMakeLists.txt后,直接生成适配MSVC的Makefile或VS项目:

cmake_minimum_required(VERSION 3.15)
project(DemoApp)

# 设置C++标准
set(CMAKE_CXX_STANDARD 17)

# 添加自定义包含目录
include_directories(src/include thirdparty/rapidjson/include)

# 指定源文件
add_executable(DemoApp src/main.cpp src/render.cpp)

# 链接需要的库
target_link_libraries(DemoApp opengl32 glu32)

打开MSVC命令提示符,执行以下命令生成并构建:

mkdir build && cd build
cmake -G "NMake Makefiles" ..
nmake

CMake会自动处理MSVC的include路径、链接器参数,你只需维护逻辑清晰的CMake配置即可。

3. 用MSBuild属性表统一配置(VS集成场景)

如果在Visual Studio里管理Makefile项目,可以把常用的include/lib路径写成.props属性文件,后续项目直接导入:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <!-- 追加自定义包含目录到系统路径前 -->
    <IncludePath>../src/include;../thirdparty/rapidjson/include;$(IncludePath)</IncludePath>
    <!-- 追加自定义库目录 -->
    <LibraryPath>../lib;$(LibraryPath)</LibraryPath>
  </PropertyGroup>
</Project>

在VS的Makefile项目属性中,找到「通用属性」→「导入属性表」,添加这个.props文件,后续新项目直接复用该属性表,无需重复手动设置路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:03:31