我有一个固件程序,我正尝试在 Windows 上使用 CMake 构建。我正在使用 GitBash shell 来运行“Make”命令并创建一个 makefile,但是 windows 可以有 8188 个字符的限制,makefile 超过了这个限制。结果构建失败。
我使用的交叉编译器是arm-none-eabi-gcc工具链,我的程序必须在Windows上运行。
我用来生成make文件的命令如下所示:
$ cmake -DDFU_FILENAME=dfu.zip -DKEY_DIR=${HOME}/Downloads -DARM_NONE_EABI_PATH="/c/Program Files (x86)/Arm GNU Toolchain arm-none-eabi/11.3 rel1/arm-none-eabi" -DSDK_ROOT_DIR=${HOME}/fatfs/stix_nrf_sdk -DVERSION=259 -DCMAKE_TOOLCHAIN_FILE="../stix_toolchain.cmake" -DCMAKE_C_COMPILER:FILEPATH="/c/Program Files (x86)/Arm GNU Toolchain arm-none-eabi/11.3 rel1/bin/arm-none-eabi-gcc.exe" ..
期望在 Windows 不截断文件的情况下成功构建 makefile。但是,字符限制被截断,导致出现以下错误消息:
$ make [ 0%] Building C object CMakeFiles/stix_fw.dir/main.c.obj arm-none-eabi-gcc.exe: error: unrecognized command-line option '-fstac'; did you mean '-fstats'? arm-none-eabi-gcc.exe: fatal error: no input files compilation terminated. make[2]: *** [CMakeFiles/stix_fw.dir/build.make:76: CMakeFiles/stix_fw.dir/main.c.obj] Error 1 make[1]: *** [CMakeFiles/Makefile2:118: CMakeFiles/stix_fw.dir/all] Error 2 make: *** [Makefile:91: all] Error 2
注意相关文档(说明限制实际上是 8191 个字符):here.
CMake 有逻辑来检测何时命令行太长并相应地调整它生成的内容。另见https://gitlab.kitware.com/cmake/cmake/-/merge_requests/705。所以你遇到的可能是一个错误或一个未处理的案例。
我会尝试从 PowerShell 等不同的 shell 运行,看看它是否有相同的限制。
如果这不起作用,或者您不喜欢这种方法,您可能不得不使用 建议的解决方法 - 即,将命令行中的一些内容移动到文件中。 MSVC 有一个机制 - command files.