如何在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
相关产品推荐
相关产品推荐

