Передача пустых строк в cmake? - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь переопределить функцию в cmake.Но только некоторые подписи для этой функции.Если я не узнаю подпись, я просто хочу назвать оригинал со всеми оригинальными аргументами.Это работает нормально, если только функция не вызывается с пустыми строками ("") в качестве аргументов.Проблема может быть проиллюстрирована следующим образом:

function(y)
  list(LENGTH ARGN len)
  message("y got ${len} elements: ${ARGN}")
endfunction()

function(x)
  list(LENGTH ARGN len)
  message("x got ${len} elements: ${ARGN}")
  y(${ARGN})
endfunction()

x(a b "")
x(a "" c)

Сохраните вышеупомянутое в x.cmake и запустите cmake -P x.cmake, который печатает

> cmake -P x.cmake
x got 3 elements: a;b;
y got 2 elements: a;b
x got 3 elements: a;;c
y got 2 elements: a;c

Т.е., y не получаетсяпустая строка и моя переопределенная функция перестает работать.Любая подсказка, как передать все аргументы, включая пустые строки?

Реальный вариант использования пытается переопределить file, чтобы изменить установку.Ваша альтернатива, похоже, не работает для этого:

function(file)
  message("Calling file(${ARGN})")
  _file("${ARGN}")
endfunction()

include("cmake_install.cmake")

В результате

> cmake -P cmake_ln_install.cmake
-- Install configuration: "RelWithDebInfo"
Calling file(RPATH_CHECK;FILE;/home/janw/cmake/linux/lib/swipl/bin/x86_64-linux/swipl;RPATH;/home/janw/cmake/linux/lib/swipl/lib/x86_64-linux)
CMake Error at cmake_ln_install.cmake:3 (_file):
  _file must be called with at least two arguments.
Call Stack (most recent call first):
  src/cmake_install.cmake:43 (file)
  cmake_install.cmake:42 (include)
  cmake_ln_install.cmake:6 (include)

1 Ответ

0 голосов
/ 24 сентября 2018

Изменение

y(${ARGN})

на

y("${ARGN}")

заставляет его вести себя так, как вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...