4 Stimmen

Cmake beschwert sich über falsche Anzahl von Argumenten

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

Der Fehler ist:

CMake Fehler bei src/Wt/Dbo/CMakeLists.txt:18 (SET_TARGET_PROPERTIES): set_target_properties wurde mit der falschen Anzahl von Argumenten aufgerufen

Wenn ich sie entferne, funktioniert die Konfiguration einwandfrei.
Haben Sie eine Idee, warum?

Danke,
Omer

10voto

brofield Punkte 2196

Denken Sie daran, dass es sich um ein Makro handelt, d.h. die Symbole werden ersetzt, bevor sie ausgewertet werden. Das bedeutet, dass Symbole, die leere Zeichenketten sind, durch nichts ersetzt werden, bevor sie ausgewertet werden. Wenn also WTDBO_SOVERSION "" ist, dann

SET_TARGET_PROPERTIES(wtdbo PROPERTIES SOVERSION ${WTDBO_SOVERSION})

werden würde

SET_TARGET_PROPERTIES(wtdbo PROPERTIES SOVERSION)

und dies würde den Fehler auslösen. Wenn leere Zeichenketten für Ihren Zweck gültig sind, umgeben Sie das Symbol mit Anführungszeichen, z. B.

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

4voto

richq Punkte 53842

Sind Sie sicher, dass Sie die Variablen richtig eingestellt haben? Ich habe es mit dieser CMakeLists.txt-Datei überprüft, und es funktioniert korrekt:

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"
)

Wenn ich jedoch die SET(WTDBO_SOVERSION 1) Zeile erhalte ich die gleiche Fehlermeldung wie Sie. Die Hilfe für set_target_properties ist wie folgt, Sie tun also definitiv das Richtige:

Ziele können haben wie sie aufgebaut sind.

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

Eigenschaften eines Ziels festlegen. Die Syntax für den Befehl ist die Auflistung aller Dateien aufzulisten, die Sie ändern möchten, und dann geben Sie die Werte an, die Sie setzen wollen weiter. [ ] verwenden und es extrahieren GET_TARGET_PROPERTY Befehl.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X