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

Ошибка:

Ошибка CMake в src / Wt / Dbo / CMakeLists.txt: 18 (SET_TARGET_PROPERTIES): set_target_properties вызывается с неправильным количеством аргументов

Если я удалю его, все будет нормально.
Есть идеи, почему?

Спасибо,
Омер

4
the_drow 19 Дек 2009 в 20:20
Я не знаю cmake, но я подумал, что это не может быть слишком сложно, поэтому я немного погуглил, и это выглядит нормально в соответствии с базовой информацией, которую я смог найти. Предложения: посмотрите инструкции перед этим, опубликуйте еще немного своего скрипта и укажите номера строк, посмотрите, где определены макросы.
 – 
Tony van der Peet
19 Дек 2009 в 22:03

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 команда.

4
richq 21 Дек 2009 в 11:14

Помните, что это макрос, поэтому символы заменяются перед оценкой. Это означает, что символы, представляющие собой пустые строки, будут заменены на ничего перед оценкой. Таким образом, если WTDBO_SOVERSION равен "", то

SET_TARGET_PROPERTIES(wtdbo PROPERTIES SOVERSION ${WTDBO_SOVERSION})

Станет

SET_TARGET_PROPERTIES(wtdbo PROPERTIES SOVERSION)

И это вызовет ошибку. Если для ваших целей подходят пустые строки, заключите символ в кавычки. например

SET_TARGET_PROPERTIES(wtdbo PROPERTIES SOVERSION "${WTDBO_SOVERSION}")
9
brofield 21 Дек 2009 в 11:36