【问题标题】:CMake not defining variablesCMake没有定义变量
【发布时间】:2022-03-26 09:52:42
【问题描述】:

当试图在 config.h 中定义项目版本变量以包含在源文件中时,CMake 没有定义它们

CMakeLists.txt 看起来像这样

cmake_minimum_required(VERSION 3.0)
project(podder VERSION 1.0 LANGUAGES CXX)

configure_file(config.h.in config.h ESCAPE_QUOTES)

config.h.in

#ifndef HAVE_CONFIG_H
#define HAVE_CONFIG_H

#cmakedefine ${CMAKE_PROJECT_VERSION}

#endif

而生成的 config.h 是这样的

#ifndef HAVE_CONFIG_H
#define HAVE_CONFIG_H

/* #undef  */

#endif

【问题讨论】:

  • 如果您改用#cmakedefine CMAKE_PROJECT_VERSION 会怎样?
  • 另外,变量是PROJECT_VERSION,而不是CMAKE_PROJECT_VERSION
  • 据我所知(cmake.org/cmake/help/latest/variable/… 也有效
  • 使用 PROJECT_VERSION 没有区别,#cmakedefine CMAKE_PROJECT_VERSION 只会产生 #define CMAKE_PROJECT_VERSION
  • #cmakedefine ${PROJECT_VERSION} 怎么样?

标签: c++ cmake


【解决方案1】:

你想要的是

#ifndef HAVE_CONFIG_H
#define HAVE_CONFIG_H

#cmakedefine PROJECT_VERSION ${PROJECT_VERSION}

#endif

语法是#cmakedefine VAR ...,其中VAR是变量名(没有$()),表达式...被求值,见configure_file()。如果变量 VAR 未定义或计算结果为 false,则将其替换为 /* #undef VAR */

【讨论】:

    【解决方案2】:

    您应该使用#define @CMAKE_PROJECT_VERSION@ 而不是#cmakedefine ${CMAKE_PROJECT_VERSION}

    【讨论】:

    • 请遵循社区准则并仅发布答案作为答案。如果您有类似的问题并且无法解决,请将其发布为评论。如果这个答案确实可以解决您遇到的问题,请让答案更清楚。
    猜你喜欢
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    相关资源
    最近更新 更多