Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Path CMake-列出绝对路径。_Path_Cmake_Shared Libraries - Fatal编程技术网

Path CMake-列出绝对路径。

Path CMake-列出绝对路径。,path,cmake,shared-libraries,Path,Cmake,Shared Libraries,我有一个变量: set(${PROJECT_NAME}_EXTERNAL_LIBRARIES ${PocoNetExternal_LIBRARIES} ) 它来自: set(EXTERNAL_NAME PocoNetExternal) set(${EXTERNAL_NAME}_LIBRARIES ${PROJECT_BINARY_DIR}/${EXTERNAL_NAME}/Foundation/${CMAKE_SHARED_LIBRARY_PREFIX}

我有一个变量:

set(${PROJECT_NAME}_EXTERNAL_LIBRARIES
        ${PocoNetExternal_LIBRARIES}
)
它来自:

set(EXTERNAL_NAME PocoNetExternal)
    set(${EXTERNAL_NAME}_LIBRARIES
        ${PROJECT_BINARY_DIR}/${EXTERNAL_NAME}/Foundation/${CMAKE_SHARED_LIBRARY_PREFIX}PocoFoundation${POCO_build_postfix}${CMAKE_STATIC_LIBRARY_SUFFIX}
        ${PROJECT_BINARY_DIR}/${EXTERNAL_NAME}/Util/${CMAKE_SHARED_LIBRARY_PREFIX}PocoUtil${POCO_build_postfix}${CMAKE_STATIC_LIBRARY_SUFFIX}
        ${PROJECT_BINARY_DIR}/${EXTERNAL_NAME}/Net/${CMAKE_SHARED_LIBRARY_PREFIX}PocoNet${POCO_build_postfix}${CMAKE_STATIC_LIBRARY_SUFFIX}
       )
由于中讨论的问题,我需要所有这些路径都是相对的

我试过这个:

function(makeLibPathsAbsolute)

    set(temp ${${PROJECT_NAME}_EXTERNAL_LIBRARIES})    #rename list
    set(external_libraries_rel)                        #make empty list

    list(LENGTH temp len1)                 #len1 is length of temp list
    math(EXPR len2 "${len1} - 1")           #len2 is len1 - 1

    foreach(val RANGE ${len2})                                 #for val = 0 to len2
        list(GET temp ${val} relPath)                         #relPath becomes the {val} entry of temp
        get_filename_component(absPath ${relPath} ABSOLUTE)   #make relPath Absolute and call it absPath
        list(APPEND external_libraries_rel ${absPath})        #Append this to the external_libraries_rel list
    endforeach()

endfunction()
但是当我使用
target\u link\u库(${name}${external\u libraries\u rel})
时,我会得到一个与我试图链接的库相关的所有函数的未定义引用错误。表示库尚未实际链接


我的
makeLibPathsAbsolute()
函数是否正确?

默认情况下,函数中设置的所有变量在外部都不可见。(换句话说,变量定义的范围是函数的范围)

要使变量对函数的调用方可见,请使用命令的PARENT_SCOPE选项

例如,您可以通过在函数末尾添加此行来“发布”外部库列表:

set(external_libraries_rel ${external_libraries_rel} PARENT_SCOPE)

您似乎没有从函数中返回任何内容。你能检查一下传递给
target\u link\u库的变量不是空的吗?@arrowd:你为什么要删除自己的答案?除了missed选项之外(我认为这是无意的),它为声明和实现应该返回某些内容的函数提供了一个很好的方法。我在文章中的主要观点是省略了
PARENT\u SCOPE
,但事实证明这是不可能的。至于使用return args从函数返回,我认为这不值得单独回答。如果你愿意,只要把它添加到你的帖子里就行了。