在执行之前制作 CMake 打印命令

2024-11-07 08:55:00
admin
原创
27
摘要:问题描述:我正在开发一个使用 Linux 上的 CMake 构建的大型 C++ 项目。CMake 运行正常,在模块和应用程序树中生成大量 Makefile。运行 GNUmake会导致链接器错误。如何make在运行命令之前打印出确切的命令?-d 选项不会打印命令,但是会打印大量无用的信息。-n 选项会打印所有命...

问题描述:

我正在开发一个使用 Linux 上的 CMake 构建的大型 C++ 项目。CMake 运行正常,在模块和应用程序树中生成大量 Makefile。运行 GNUmake会导致链接器错误。如何make在运行命令之前打印出确切的命令?

-d 选项不会打印命令,但是会打印大量无用的信息。

-n 选项会打印所有命令,但不会运行它们,所以我无法判断问题到底出在哪里。检查 make -n 的标准输出,我没有看到任何相关的命令。我怀疑某些命令会根据先前命令的结果而改变,而 Makefile 的层次结构使得很难判断到底发生了什么。

我在 make 的手册页中没有看到任何其他有用的选项。


解决方案 1:

我确信这会起作用:

make VERBOSE=1

您还应该能够将其添加到您的 CMakeLists.txt 中以永久设置:

set(CMAKE_VERBOSE_MAKEFILE on)

这在CMake FAQ中有介绍。

解决方案 2:

对于那些使用内部cmake --build调用的用户make,请使用:

  $ cmake --build <dir> -- VERBOSE=1

注意--之前的VERBOSE=1! 将参数传递给底层make进程。

或者:

  $ VERBOSE=1 cmake --build <dir>

它也传递VERBOSE=1make,这次是通过环境变量。

或者,如果使用cmake 3.14或更高版本:

  $ cmake --build <dir> --verbose

注意参数的顺序!--verbose选项必须位于--build其参数之后。

解决方案 3:

对于 automake 生成的 Makefile,请尝试:

make V=1

解决方案 4:

一个适用于 GNU make 的选项,适用于任何 Makefile(无论是否由 CMake 生成),即使用make 选项。这将打印出正在执行的--trace命令并仍然执行它们。make

这适用于所有命令,而不仅仅是那些在 CMake/automake 生成的 makefile 中触发VERBOSE=1打印V=1的命令。

Linux 上的另一种方法是在strace下运行 make ,如下所示strace -f -e trace=execve make <make options>。 strace 的输出将包括执行的每个进程:由 make 执行的进程、由 make 运行的 shell 脚本执行的进程等。

例如,您可能会发现 CMake 生成的 makefile 已执行/usr/bin/cmake -E __run_co_compile <lots of options ...>,但仍然想知道这反过来会运行的确切编译器调用是什么。您可以使用 strace 方法获得这些信息。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用