代码之家  ›  专栏  ›  技术社区  ›  Jan Wielemaker

在cmake中传递空字符串?

  •  0
  • Jan Wielemaker  · 技术社区  · 5 年前

    我试图重新定义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)
    
    1 回复  |  直到 5 年前
        1
  •  2
  •   Kane    5 年前

    改变

    y(${ARGN})
    

    y("${ARGN}")
    

    让它像你期望的那样。