Cmake抱怨错误的论点数量

时间:2009-12-19 17:20:07

标签: cmake

SET_TARGET_PROPERTIES(
  wtdbo
PROPERTIES
  VERSION ${VERSION_SERIES}.${VERSION_MAJOR}.${VERSION_MINOR}
  SOVERSION ${WTDBO_SOVERSION}
  DEBUG_POSTFIX "d"
)

错误是:

  

src / Wt / Dbo / CMakeLists.txt的CMake错误:18(SET_TARGET_PROPERTIES):     调用set_target_properties时参数数量不正确

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

谢谢,
奥马尔

2 个答案:

答案 0 :(得分:7)

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

SET_TARGET_PROPERTIES(wtdbo PROPERTIES SOVERSION ${WTDBO_SOVERSION})

会变成

SET_TARGET_PROPERTIES(wtdbo PROPERTIES SOVERSION)

这会触发错误。如果空字符串对您的目的有效,则用引号括起符号。 e.g。

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

答案 1 :(得分:4)

您确定已正确设置变量吗?我已经检查过这个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命令。