Я пытаюсь переопределить функцию в 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)