Cmake命令行窗口太长了

时间:2017-04-03 12:06:49

标签: windows cmake

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

但是我在windows上使用arm_none_eabi进行交叉编译,而cmake没有使用响应文件或路径长度的任何其他解决方法生成makefile。因此链接步骤失败。

以下是导致问题的生成的makefile行

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没有生成windows可用的makefile? 这只是因为我正在交叉编译吗? 我该怎么做才能避免这个问题?

修改

Generator是GNU Makefiles

CMake版本3.7.2

编辑2

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

submited bug

1 个答案:

答案 0 :(得分:6)

将我的评论转化为答案

我遇到了与命令行长度相同的问题,可以通过在我的工具链文件中添加以下“使用响应文件”设置来解决它:

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 "")