MSVC命令行编译OpenBLAS未生成.obj文件,需适配Travis CI
解决MSVC命令行编译OpenBLAS时未生成.obj文件的问题
首先要明确:你执行的cmake -S ... -B ...命令只是完成了项目配置和构建系统文件生成(比如VS解决方案或者NMake Makefile),并没有实际编译代码——这就是为什么没有生成.obj文件的核心原因。下面是完整的命令行编译流程,适配你的需求并能直接集成到Travis CI工作流:
1. 激活MSVC命令行环境
先运行对应版本的vcvars64.bat初始化64位编译环境,以VS2019 Community为例:
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
Travis CI的Windows环境中,需先通过Chocolatey安装VS组件,再定位到对应vcvars脚本路径
2. 用CMake配置项目(优化版)
你之前的配置命令可以补充指定MSVC生成器避免歧义,同时添加-Wno-dev抑制面向开发者的警告:
cmake -S "C:\BLAS\OpenBLAS-v0.3.10\OpenBLAS-0.3.10" ^ -B "C:\BLAS\OpenBLAS-v0.3.10\OpenBLAS-0.3.10\out" ^ -G "Visual Studio 16 2019" ^ -A x64 ^ -Wno-dev
-G "Visual Studio 16 2019"明确指定生成VS2019格式的解决方案-A x64强制生成64位目标文件-Wno-dev会屏蔽你输出里的CMP0054这类开发警告
如果偏好NMake而非VS IDE构建,可改用如下配置命令:
cmake -S "C:\BLAS\OpenBLAS-v0.3.10\OpenBLAS-0.3.10" ^ -B "C:\BLAS\OpenBLAS-v0.3.10\OpenBLAS-0.3.10\out" ^ -G "NMake Makefiles" ^ -DCMAKE_BUILD_TYPE=Release ^ -Wno-dev
3. 执行实际编译(生成.obj和最终库)
这一步才是真正编译代码、生成.obj文件的环节:
若使用VS解决方案生成器
用cmake --build命令直接触发编译,指定配置和并行线程数:
cmake --build "C:\BLAS\OpenBLAS-v0.3.10\OpenBLAS-0.3.10\out" ^ --config Release ^ --parallel 4
--config Release指定编译Release版本(可替换为Debug)--parallel 4用4线程加速编译,和你之前配置的线程数匹配
若使用NMake Makefiles
进入构建目录后运行nmake即可:
cd "C:\BLAS\OpenBLAS-v0.3.10\OpenBLAS-0.3.10\out" nmake
关于你输出中警告的说明
CMAKE_FORCE_Fortran_COMPILER弃用警告:OpenBLAS的CMake脚本版本偏旧,这个警告不影响纯C代码的编译(你提到无C++代码),可以直接忽略;如果后续需要Fortran相关功能,再手动指定CMAKE_Fortran_COMPILER即可。- CMP0054开发警告:我们已经通过
-Wno-dev参数屏蔽,无需额外处理。
将上述步骤整合到Travis CI的.travis.yml中,就能实现OpenBLAS的自动化编译啦。
内容的提问来源于stack exchange,提问作者Tom Ligon
相关产品推荐
相关产品推荐

