【问题标题】:cmake: setting default values for argumentscmake:设置参数的默认值
【发布时间】:2013-11-12 02:08:26
【问题描述】:

我的 UNIX Makefile 如下:

   param=0

   run:
       ./foo -r "fun($(param))"

所以如果我做make run,我会得到./foo - r "fun(0)" 和 对于make run param=10,我得到./foo -r "fun(10)"

现在我想使用 cmake 生成类似的 Makefile。

   add_custom_target(
    run 
    ./foo -r "\"fun($(param))\""
   )

如何在 cmake 配置文件中设置 param 的默认值?

【问题讨论】:

  • 我认为这是不可能的,因为 CMake 设计用于任何类型的构建系统,例如,适用于 make 的内容对 msvc 毫无意义。可能会使用一些跨平台的解决方案,比如从文件中读取变量?

标签: cmake


【解决方案1】:

CMake 中的概念有点不同。您可以定义带有默认值和文档字符串等的“缓存变量”(基本上是在同一构建目录中为后续构建记住的变量,并且可以由用户自定义)。然后可以通过将 -D name:type=value 选项传递给 cmake 或使用更友好的前端之一(例如 ccmake,CMake 的 curses UI)来更改这些。

基于您的问题的示例:

SET(param 0 CACHE STRING "测试变量默认为 '0'") # ... add_custom_target(运行 ./foo -r "\"fun(${param})\"")

您可以在详尽的 CMake 文档中找到更多详细信息。

PS。这是针对 CMake 中的变量,特别是 CMakeLists.txt 本身;据我所知,更改值的可能性不会转移到生成的 Makefile 中。首先我不确定这是否可行,因为它可能不兼容 CMake 支持的所有目标(例如 Visual Studio 项目等等)。无论如何,CMake 似乎并不是为生成独立于 CMake 使用的构建文件而设计的。

【讨论】:

  • 我的想法和你的更新一样。也许可以在生成特定(例如 Unix)Makefile 时添加自定义行。
  • @nil 可以使用add_custom_command 添加自定义构建规则,但我看不到在Makefile 的顶层为变量设置默认值的方法。跨度>
【解决方案2】:

使用

set (projectname_param 0)

设置它。

【讨论】:

  • 它对我不起作用。 param 值不会被替换。我得到./foo -r "fun()"
猜你喜欢
  • 2019-10-22
  • 2015-09-27
  • 2018-05-07
  • 2015-02-19
  • 2011-10-31
  • 2013-04-28
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
相关资源
最近更新 更多