Windows下Clang+CMake+Ninja编译无.exe后缀问题咨询
问题原因与解决方法
你遇到的可执行文件无.exe后缀的问题,根源在于构建命令里的-DCMAKE_SYSTEM_NAME="Generic"参数:
- CMake的平台识别逻辑:CMake通过
CMAKE_SYSTEM_NAME变量判断目标操作系统。当你将其设为Generic时,CMake会进入通用构建模式,不会添加任何平台特有的文件后缀——包括Windows系统默认要求的.exe。正常情况下,CMake在Windows环境中会自动识别系统类型,默认给可执行文件加上.exe后缀。 - 手动改名可运行的本质:Clang在Windows下编译生成的二进制文件本身是符合PE格式的可执行程序,只是缺少
.exe后缀导致Windows系统无法自动识别为可执行文件。改名后系统能正确识别其格式,因此可以正常运行。
解决方法:移除构建命令中的-DCMAKE_SYSTEM_NAME="Generic"参数,让CMake自动检测Windows平台。修改后的构建命令如下:
cmake -S . -B build -G Ninja -DCMAKE_C_COMPILER:PATH="%ProgramFiles(x86)%\LLVM\bin\clang.exe" -DCMAKE_CXX_COMPILER:PATH="%ProgramFiles(x86)%\LLVM\bin\clang.exe" -DCMAKE_C_COMPILER_ID="Clang" -DCMAKE_CXX_COMPILER_ID="Clang" cmake --build build
这样构建完成后,生成的可执行文件会自动带有.exe后缀,无需手动改名。
内容的提问来源于stack exchange,提问作者imrichardcole
相关产品推荐
相关产品推荐

