我试图重新定义cmake中的函数。但是,这个函数只有一些签名。如果我不认识签名,我只想用所有原始参数调用原始签名。这很好,除非函数os使用空字符串调用(
""
)作为论据。这个问题可以这样说明:
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)