Cmake 命令行窗口太长



根据我对cmake的理解,该工具负责文件路径和命令行长度,以避免达到8191个字符的Windows限制。

但是,我正在与 Windows 上的arm_none_eabi进行交叉编译,并且 cmake 不会使用响应文件或任何其他路径长度解决方法生成生成文件。因此,链接步骤失败。

这是生成的导致问题的生成文件行

XXXXX_EXTERNAL_OBJECTS =
XXXX_OBJECTS = 
"file1.c.obj" 
"file2.c.obj" 
"file3.c.obj" 
"fileXX.c.obj" 
C:/YYYY/GNU_Tools_ARM_Embedded/6-2016-q4-major/bin/arm-none-eabi-gcc.exe  -mcpu=cortex-m4  -mthumb -DSTM32L4__xx -mfloat-abi=softfp -DXXXX -O0 -g -Wfatal-errors -Wall -Wno-unused-function -std=c99 -fdata-sections -ffunction-sections  -mcpu=cortex-m4  -march=armv7e-m -O0 -g --specs=nano.specs -mthumb -Wl,--gc-sections -nostartfiles -Wl,-Map=$@.map -TC:SSSSSSSSS/STM32L4__RGTx_FLASH.ld $(XXXX_OBJECTS) $(XXXXX_EXTERNAL_OBJECTS)  -o outHexFile_XXXX  -LC:/YYYYYYYYYYYYYYYY/arm-nano-eabi/lib

最终的行长约为 23000 个字符(远远超过 8191 个字符(。

为什么Cmake没有生成一个可以被窗口使用的生成文件?这仅仅是因为我在交叉编译吗?我该怎么做才能避免这个问题?

编辑

生成器是 GNU 生成文件

CMake 版本 3.7.2

编辑 2

这可能会在将来的版本中自动处理

提交的错误

将我的评论变成答案

我在命令行长度方面遇到了同样的问题,可以通过将以下"使用响应文件"设置添加到我的工具链文件来解决它:

SET(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1)
SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1)
SET(CMAKE_C_RESPONSE_FILE_LINK_FLAG "@")
SET(CMAKE_CXX_RESPONSE_FILE_LINK_FLAG "@")

如果你本来会使用ninja你需要一个额外的:

SET(CMAKE_NINJA_FORCE_RESPONSE_FILE 1 CACHE INTERNAL "")

最新更新