是否可以找到具有相同名称的所有可执行文件?

时间:2017-06-25 15:37:55

标签: r cmake

我正在做什么我正在编写一个 CMakeLists.txt 来构建一个需要使用 R 的C ++项目。 / p>

我的问题是什么通常,当我想找到一个包/程序时,我会使用find_package/program函数。但这只能找到路径中的第一个。如果我想查找具有相同名称的所有可执行文件,该怎么办?

例如,如果有人在计算机上安装了多个版本的R,我可以找到它们并返回列表吗?另一种方法是可以检测是否安装了多个R可执行文件?

谢谢!

2 个答案:

答案 0 :(得分:2)

正如@Tsyvarev所回答的那样中没有内置方式,但你总是可以在一个循环内完成。

所以这是我缺少的find_program_all() CMake函数的跨平台版本:

<强>的CMakeLists.txt

cmake_minimum_required(VERSION 3.3)

project(TestFindProgramAll NONE)

function(find_program_all _var)
    if (NOT DEFINED ${_var})
        while(1)
            unset(_found CACHE)
            find_program(_found ${ARGN})
            if (_found AND NOT _found IN_LIST ${_var})
                set(${_var} "${${_var}};${_found}" CACHE FILEPATH "Path to a program." FORCE)
                # ignore with the next try
                get_filename_component(_dir "${_found}" DIRECTORY)
                list(APPEND CMAKE_IGNORE_PATH "${_dir}")
            else()
                unset(_found CACHE)
                break()
            endif()
        endwhile()
    endif()
endfunction()

find_program_all(_gcc "gcc")
message(STATUS "_gcc = ${_gcc}")

它模仿find_program()行为并缓存结果。

使用我的多个gcc安装进行测试。

<强>参考

答案 1 :(得分:1)

CMake没有随时可用的功能来返回匹配程序的列表

您可以手动迭代搜索路径,或使用其他实用程序,例如comments中@BenBolker建议的which -a