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

Windows编译sick_safetyscanners_base遇msbuild D8021错误求助

解决Windows10下编译sick_safetyscanners_base库的问题

一、正确的Windows编译流程(核心)

Windows下优先使用VS2022原生编译链,不要强行套用Linux的Makefile流程,步骤如下:

  1. 打开VS2022开发者PowerShell/命令提示符(必须用这个,它会自动配置VS编译环境)
  2. 清空build目录下的所有缓存文件(避免之前的错误配置干扰)
  3. 执行CMake生成VS工程,手动指定Boost路径(解决组件找不到的问题):
cmake -G "Visual Studio 17 2022" -A x64 -DBoost_USE_STATIC_LIBS=ON -DBOOST_ROOT="你的Boost 1.80.0安装根目录" ..
  • -G "Visual Studio 17 2022":指定生成VS2022工程
  • -A x64:编译64位版本(需和你安装的Boost架构一致,若装32位则改成Win32)
  • -DBOOST_ROOT:手动指定Boost根目录,确保CMake能找到所需组件

二、逐个解决你遇到的问题

问题1:make -j8报错"No targets specified and no makefile found"

  • 本质原因:Windows原生不支持GNU Make,且你之前的CMake默认生成的是VS工程,不是Makefile,自然找不到编译目标。
  • 解决:完全放弃make命令,改用VS的编译工具(msbuild或直接打开VS工程)。

问题2:msbuild报错"command line error D8021: invalid numeric argument /Werror"

  • 原因:/Werror是GCC的编译参数(将警告视为错误),但MSVC不识别该参数,CMake生成工程时误传入了跨平台不兼容的编译选项。
  • 解决:在CMake命令中替换成MSVC兼容的参数,重新生成工程后再编译:
  1. 重新执行CMake,添加MSVC的警告参数:
cmake -G "Visual Studio 17 2022" -A x64 -DBoost_USE_STATIC_LIBS=ON -DBOOST_ROOT="你的Boost路径" -DCMAKE_CXX_FLAGS="/WX" ..

(/WX是MSVC对应-Werror的参数,若不需要将警告当错误,可换成/W0关闭警告)
2. 执行msbuild编译(并行编译用/m:8对应-j8):

msbuild sick_safetyscanners_base.sln /p:Configuration=Release /m:8

问题3:指定"Unix Makefiles"时找不到Boost组件

  • 原因:该生成器会寻找MinGW/WSL环境下的Boost,而你安装的是针对MSVC的Windows版Boost,二者不兼容,没必要在Windows下折腾Unix编译链。
  • 解决:直接使用前面推荐的VS2022生成器,配合BOOST_ROOT参数,CMake就能正确识别Boost的system、thread、chrono组件。

三、验证安装与后续使用

编译完成后:

  • 静态库文件(.lib)会生成在build/Release(或Debug)目录下
  • 头文件位于原仓库的include目录中

在你的C++项目中调用时,需:

  1. 在IDE中添加头文件搜索路径,指向仓库的include文件夹
  2. 添加库文件搜索路径,指向build/Release文件夹
  3. 链接对应的.lib库文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:01:19