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

如何在Windows与Linux环境下构建可跨平台运行的C++库

跨平台C++项目构建方案

最优方案:使用CMake做构建配置

你想要的保留现有项目结构、新增build/linux、build/win子目录存放对应构建文件的需求,用CMake可以完美实现,不需要手动维护多套构建脚本,还能同时兼容GCC、MinGW、MSVC三大编译器,是目前C++跨平台项目的主流选择。

第一步:调整项目结构

你只需要在项目根目录新增CMakeLists.txt配置文件,以及你要求的build子目录即可,原有项目代码、目录结构完全不用改:

项目根目录
├── src/
│   └── main.cpp
├── include/
│   ├── Inputs.h
│   ├── GenerateTabValues.h
│   └── Prototypes.h
├── data/
│   ├── TabNodes.csv
│   └── TabWeights.csv
├── output/
│   ├── test1/
│   ├── test2/
│   └── test3/
├── build/
│   ├── linux/  # Linux构建产物、Makefile存放目录
│   └── win/    # Windows构建产物、工程文件存放目录
└── CMakeLists.txt

第二步:编写CMakeLists.txt示例

下面的配置完全对应你原有Makefile的功能,支持test1/test2/test3/clean等目标,自动处理依赖查找:

cmake_minimum_required(VERSION 3.16)
project(your_lib_name CXX)

# 基础编译参数
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall")
if(MSVC)
  add_compile_options(/W3) # MSVC专用编译参数
endif()

# 查找依赖库
find_library(GSL_LIB gsl REQUIRED)
find_library(GSL_CBLAS_LIB gslcblas REQUIRED)
find_library(GMP_LIB gmp REQUIRED)
find_library(QUADMATH_LIB quadmath REQUIRED)
set(ALL_LIBS m ${GSL_LIB} ${GSL_CBLAS_LIB} ${GMP_LIB} ${QUADMATH_LIB})

# 头文件目录
include_directories(include)

# 生成主程序
add_executable(main src/main.cpp)
target_link_libraries(main PRIVATE ${ALL_LIBS})

# 定义test目标
add_custom_target(test1
  COMMAND main test1
  WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/output/test1
  DEPENDS main
)
add_custom_target(test2
  COMMAND main test2
  WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/output/test2
  DEPENDS main
)
add_custom_target(test3
  COMMAND main test3
  WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/output/test3
  DEPENDS main
)
add_custom_target(all DEPENDS test1 test2 test3)

第三步:各平台构建步骤

Linux端构建

和你原来的使用习惯完全一致:

cd build/linux
cmake ../.. -DCMAKE_BUILD_TYPE=Debug
make # 或者 make test1 直接编译运行test1

build/linux目录下会生成你熟悉的Makefile和main可执行文件。

Windows端构建

你可以按需选择MinGW或者MSVC工具链:

  1. MinGW方式(和Linux操作逻辑完全一致)
    Windows下MinGW环境自带的mingw32-make就是GNU Make的等效工具,完全兼容Makefile语法:
cd build\win
cmake ../.. -G "MinGW Makefiles"
mingw32-make # 或者 mingw32-make test1
  1. MSVC方式(原生Visual Studio工程)
    如果需要生成Visual Studio工程给MSVC编译:
cd build\win
cmake ../.. -G "Visual Studio 17 2022" -A x64

直接双击生成的sln工程文件即可用VS打开编译,也可以用cmake --build . --config Debug命令行编译。

常见问题解答

  1. Windows有没有make的等效工具?
    有两类:MinGW环境提供的mingw32-make完全兼容GNU Make语法,MSVC编译器套件提供的nmake功能类似但语法有差异。不建议手写两套Makefile适配,维护成本很高。
  2. 需要同时用MSVC和MinGW吗?
    看你的需求:如果你的依赖库(GSL、GMP等)有MSVC编译版本,或者你需要给Windows原生环境提供二进制包,可以支持MSVC;如果只是自己用,MinGW足够,和Linux下的开发体验几乎没有差异。CMake会自动处理两种工具链的参数差异,你不需要改配置。

可移植性优化建议

  • 代码中不要硬编码路径分隔符,用C++17的std::filesystem库处理路径,或者用宏判断平台区分/和\。
  • 不要使用Linux特有API,如果必须使用系统调用,用宏包裹做平台适配。
  • 依赖库尽量选择官方提供跨平台支持的版本,你目前用的GSL、GMP等都有成熟的Windows移植版。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:30:01