Cmake抱怨错误的论点数量

the*_*row 4 cmake

SET_TARGET_PROPERTIES(
  wtdbo
PROPERTIES
  VERSION ${VERSION_SERIES}.${VERSION_MAJOR}.${VERSION_MINOR}
  SOVERSION ${WTDBO_SOVERSION}
  DEBUG_POSTFIX "d"
)
Run Code Online (Sandbox Code Playgroud)

错误是:

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

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

谢谢,
奥梅尔

bro*_*eld 8

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

SET_TARGET_PROPERTIES(wtdbo PROPERTIES SOVERSION ${WTDBO_SOVERSION})
Run Code Online (Sandbox Code Playgroud)

会成为

SET_TARGET_PROPERTIES(wtdbo PROPERTIES SOVERSION)
Run Code Online (Sandbox Code Playgroud)

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

SET_TARGET_PROPERTIES(wtdbo PROPERTIES SOVERSION "${WTDBO_SOVERSION}")
Run Code Online (Sandbox Code Playgroud)


ric*_*chq 5

您确定变量设置正确吗?我已经检查过这个 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"
)
Run Code Online (Sandbox Code Playgroud)

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

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

set_target_properties(target1 target2 ...
           PROPERTIES prop1 value1
           prop2 value2 ...)
Run Code Online (Sandbox Code Playgroud)

设置目标的属性。该命令的语法是列出要更改的所有文件,然后提供接下来要设置的值。您可以使用任何所需的 prop 值对,并稍后使用该 GET_TARGET_PROPERTY命令将其提取。