【问题标题】:Cmake command line too long windowsCmake命令行窗口太长
【发布时间】:2017-08-28 07:08:08
【问题描述】:

根据我对 cmake 的理解,该工具会处理文件路径和命令行长度,以避免达到 Windows 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 ? 这仅仅是因为我在交叉编译吗? 我能做些什么来避免这个问题?

编辑

生成器是 GNU Makefiles

CMake 版本 3.7.2

编辑 2

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

submited bug

【问题讨论】:

  • 我遇到了同样的问题,我有一个取决于 makefile 生成器的解决方案,例如您正在使用的 Ninja 和 CMake 版本。您能否将此信息添加到您的问题中?
  • @florian OK GNU makefile 与 Cmake 3.7.2

标签: windows cmake


【解决方案1】:

把我的评论变成答案

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

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

【讨论】:

  • 这行得通,但对我来说这仍然是一个 cmake 但是。该工具应自行检测限制。我认为该错误仅存在于这种特殊的交叉编译案例中
  • “你的工具链文件”是什么意思?我是把它放在每个 CMakeLists.txt 中,还是?..
  • 是否有关于这些类型标志的官方文档?
猜你喜欢
  • 1970-01-01
  • 2018-11-25
  • 2011-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多