Visual c++ 如何使用CMake&;查看底层编译器/链接器命令行;恩马克?

Visual c++ 如何使用CMake&;查看底层编译器/链接器命令行;恩马克?,visual-c++,cmake,nmake,Visual C++,Cmake,Nmake,因此,默认情况下,响应文件用于为某些工具链指定指向编译器和链接器的命令行开关。不过,这似乎只适用于makefile。考虑到我使用NMake Makefiles生成器的场景,可以说这样做是为了绕过Windows上命令行的8192字符长度限制 显然,设置应该由CMAKE\uu\u使用\u响应\u文件\u为\u对象进行管理,就我所能找到的而言,这并没有确切的文档记录。无论如何,CMake(3.15.1)发行版附带的各种CMake脚本包含这些设置的0或1(即每种语言)。只有在cmMakefileTarg

因此,默认情况下,响应文件用于为某些工具链指定指向编译器和链接器的命令行开关。不过,这似乎只适用于makefile。考虑到我使用
NMake Makefiles
生成器的场景,可以说这样做是为了绕过Windows上命令行的8192字符长度限制

显然,设置应该由
CMAKE\uu\u使用\u响应\u文件\u为\u对象进行管理
,就我所能找到的而言,这并没有确切的文档记录。无论如何,CMake(3.15.1)发行版附带的各种CMake脚本包含这些设置的0或1(即每种语言
)。只有在
cmMakefileTargetGenerator.cxx
中的
cmMakefileTargetGenerator::CheckUseResponseFileForObjects()
才可以读取此信息(截至本文撰写时)

互补设置以
CMAKE\uu使用\u响应\u文件\u的形式存在,包括
CMAKE\uu使用\u响应\u文件\u的库

现在,虽然这在技术上是可行的,但它确实给我带来了一个不想要的副作用。在来自自动构建的日志中,我希望看到发生了什么(是的,我还将
CMAKE\u VERBOSE\u MAKEFILE=ON设置为
)。鉴于这些响应文件是动态生成的,我从日志文件中看到的命令行类似于:

C:\PROGRA~2\MICROS~1\2019\PROFES~1\VC\Tools\MSVC\1422~1.279\bin\Hostx86\x86\cl.exe @C:\Users\XA1DB~1.RLM\AppData\Local\Temp\nm2A99.tmp
这意味着我再也看不到传递的参数了。对于我的目的来说,输出基本上变得无用

如何让CMake生成生成的makefiles也会以行方式显示响应文件的内容,以便从生成日志中收集编译器/链接器命令行参数

注意:别误会我的意思,我完全理解Windows的现有限制。但是,即使调用编译器或链接器的实际调用使用响应文件,我也只希望看到响应文件的内容,而不是响应文件名。我正在寻找一种规范的方法来实现这一点,而不必想出一些骇人的解决方案,在下次CMake获得内部更新时,这些解决方案将被破坏



我还发现2019年使用的8.3(可选)路径名有点令人担忧(给定
fsutil行为集disable8dot3 1
/
ntfsdisable8dot3namecoreation
),但也许CMake作者有我没有的见解。我在最近的源代码中找不到任何设置来配置该行为。

NB:TL;向底部倾斜

与此同时,我也取得了一些进展,但不幸的是,乍一看,那些应该会影响上述行为的变量并没有起到任何作用(或者不是人们从评论中所期望的方式),即使在强制缓存空值时也是如此。摘自
Modules\Platform\Windows.cmake

#对于nmake,使长命令行重定向到文件
#使用以下语法,请参阅Windows-bcc32.cmake以了解用法
如果(CMAKE_生成器匹配“NMake”)

太长了,读不下去了(CMAJEASTIGHSPETEMIGROUP文件)@ @ P>>强> NB:<强> TL;DR朝向底部。 与此同时,我也取得了一些进展,但不幸的是,乍一看,那些应该会影响上述行为的变量并没有起到任何作用(或者不是人们从评论中所期望的方式),即使在强制缓存空值时也是如此。摘自
Modules\Platform\Windows.cmake

#对于nmake,使长命令行重定向到文件
#使用以下语法,请参阅Windows-bcc32.cmake以了解用法
如果(CMAKE_生成器匹配“NMake”)

set(CMAKE_START_TEMP_FILE)@nmake有一个显示内联文件/响应文件的选项:

/U转储内联文件

对于recursive make,您可能希望在如下环境变量中设置:

set MAKEFLAGS=U

这样,所有响应文件的内容都将显示在控制台上。

nmake有一个显示内联文件/响应文件的选项:

/U转储内联文件

对于recursive make,您可能希望在如下环境变量中设置:

set MAKEFLAGS=U

这样,所有响应文件的内容都会显示在控制台上。

按照我的传统,我会奖励我自己回答的Q&As中其他人提供的任何有用答案,我接受你的答案。按照我自己回答的Q&As中其他人提供的任何有用答案,我接受你的答案你的回答。