使用MinGW编译TetWild库时出现cc.exe多文件编译参数错误
编译TetWild库报错解决方案
错误根源分析
编译命令中同时出现了MSVC专属编译参数(如/nologo、/MP、/wdXXXX)和MinGW的cc.exe,gcc无法识别MSVC参数,会误将这些参数判定为源文件名,导致出现cannot specify '-o' with '-c', '-S' or '-E' with multiple files错误。
解决步骤
1. 彻底清理构建环境
删除现有build目录,避免残留配置干扰:
rm -rf build mkdir build && cd build
2. 显式指定MinGW编译器并配置Boost
通过CMake命令行参数指定编译器和Boost路径,避免直接修改项目CMakeLists.txt:
cmake -G "MinGW Makefiles" ^ -DCMAKE_C_COMPILER=gcc ^ -DCMAKE_CXX_COMPILER=g++ ^ -DBOOST_ROOT=/your/boost/path ^ -DBoost_INCLUDE_DIR=/your/boost/path/include ^ -DBoost_LIBRARY_DIR=/your/boost/path/lib ^ -DBoost_ARCHITECTURE=-x64 ^ -DBoost_NO_BOOST_CMAKE=ON ^ ..
注意:确保Boost库是用MinGW编译生成的,MSVC编译的Boost无法和MinGW兼容。
3. 替换MSVC参数为gcc兼容选项
添加CMake参数,覆盖原项目中的MSVC专属编译设置:
cmake -G "MinGW Makefiles" ^ # 上述编译器和Boost配置参数... -DCMAKE_C_FLAGS="-DNOMINMAX -DVC_EXTRALEAN -DWIN32_LEAN_AND_MEAN -D_CRT_SECURE_NO_WARNINGS -D_USE_MATH_DEFINES -O3 -DNDEBUG -fdiagnostics-color=always -MD" ^ -DCMAKE_CXX_FLAGS="-DNOMINMAX -DVC_EXTRALEAN -DWIN32_LEAN_AND_MEAN -D_CRT_SECURE_NO_WARNINGS -D_USE_MATH_DEFINES -O3 -DNDEBUG -fdiagnostics-color=always -MD" ^ ..
如果需要保留警告抑制,将MSVC的/wdXXXX转换为gcc的-Wno-XXX格式,例如:
/wd4275→-Wno-non-virtual-dtor/wd4996→-Wno-deprecated-declarations
4. 禁用响应文件(可选)
若问题源于响应文件(.rsp)格式错误,强制CMake不使用响应文件:
cmake -G "MinGW Makefiles" ^ # 上述所有配置参数... -DCMAKE_C_USE_RESPONSE_FILE_FOR_INCLUDES=OFF ^ -DCMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES=OFF ^ ..
5. 执行编译
使用多线程编译加快速度:
mingw32-make -j4
额外排查点
如果问题仍存在,打开geogram/src/lib/geogram/third_party/CMakeFiles/geogram_third_party.dir/build.make文件,查看第76行的编译命令,确认是否有多个源文件被错误地放到同一个-c编译指令中。
内容的提问来源于stack exchange,提问作者Buddy Boy
相关产品推荐
相关产品推荐

