【问题标题】:Cmake complains about wrong number of argumentsCmake 抱怨参数数量错误
【发布时间】:2009-12-19 17:20:06
【问题描述】:
SET_TARGET_PROPERTIES(
  wtdbo
PROPERTIES
  VERSION ${VERSION_SERIES}.${VERSION_MAJOR}.${VERSION_MINOR}
  SOVERSION ${WTDBO_SOVERSION}
  DEBUG_POSTFIX "d"
)

错误是:

src/Wt/Dbo/CMakeLists.txt:18 (SET_TARGET_PROPERTIES) 处的 CMake 错误: 使用错误数量的参数调用 set_target_properties

如果我删除它,它的配置就很好。
知道为什么吗?

谢谢,
奥马尔

【问题讨论】:

  • 我不知道cmake,但我觉得这不会太难,所以我google了一下,根据我能找到的基本手册信息看起来不错。建议:查看此之前的说明,发布更多脚本并包含行号,查看宏的定义位置。

标签: cmake


【解决方案1】:

请记住,这是一个宏,因此符号在计算之前会被替换。这意味着空字符串的符号在被评估之前将被替换为空。因此,如果 WTDBO_SOVERSION 是 "" 那么

SET_TARGET_PROPERTIES(wtdbo PROPERTIES SOVERSION ${WTDBO_SOVERSION})

会变成

SET_TARGET_PROPERTIES(wtdbo PROPERTIES SOVERSION)

这会触发错误。如果空字符串对您的目的有效,则将符号括在引号中。例如

SET_TARGET_PROPERTIES(wtdbo PROPERTIES SOVERSION "${WTDBO_SOVERSION}")

【讨论】:

    【解决方案2】:

    您确定变量设置正确吗?我检查了这个 CMakeLists.txt 文件,它工作正常:

    CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
    PROJECT(test CXX)
    ADD_LIBRARY(wtdbo SHARED test.cc)
    SET(WTDBO_SOVERSION 1)
    SET(VERSION_SERIES 1)
    SET(VERSION_MAJOR 0)
    SET(VERSION_MINOR 0)
    
    SET_TARGET_PROPERTIES(
      wtdbo
    PROPERTIES
      VERSION ${VERSION_SERIES}.${VERSION_MAJOR}.${VERSION_MINOR}
      SOVERSION ${WTDBO_SOVERSION}
      DEBUG_POSTFIX "d"
    )
    

    但是,如果我注释掉 SET(WTDBO_SOVERSION 1) 行,我会收到与您相同的错误消息。 set_target_properties 的帮助如下,所以你肯定做对了:

    目标可以具有以下属性 影响它们的构建方式。

    set_target_properties(target1 target2 ...
               PROPERTIES prop1 value1
               prop2 value2 ...)
    

    在目标上设置属性。这 该命令的语法是列出所有 要更改的文件,然后 提供您要设置的值 下一个。您可以使用任何道具值对 您想要并稍后使用 GET_TARGET_PROPERTY 命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多