CMake:FIND_LIBRARY问题

4

我的目标是通过CMake将库/usr/lib/libboinc_api.a和/usr/lib/libboinc.a链接起来。因此,我使用各种FIND_XXXX模块中提供的示例,尝试如下:

    FIND_LIBRARY(BOINC_LIBRARY NAMES libboinc_api libboinc
             DOC "The Boinc libraries")
    MESSAGE(${BOINC_LIBRARY})

但是 CMake 没有找到任何东西。
因此我尝试使用扩展:
    FIND_LIBRARY(BOINC_LIBRARY NAMES libboinc_api.a libboinc.a
             DOC "The Boinc libraries")
    MESSAGE(${BOINC_LIBRARY})

这条消息给了我/usr/lib/libboinc_api.a

我的问题是:

1)为什么我被迫指定扩展名(在cmake FIND模块中没有指定扩展名),如何避免这种情况?

2)如何链接这两个文件?(当前的情况是,消息显示只找到了第一个文件,但我可能误解了...)

非常感谢。

1个回答

8
这里有几个错误:首先,在NAMES后面的参数将被视为要搜索的备选库。所以如果找不到libboinc_api,则会在失败之前尝试libboinc。因此,你应该分别运行FIND_LIBRARY两次,每个库运行一次。
其次,你需要指定库的名称,就像它将提供给链接器的-l选项一样,即你应该仅使用boinc_api而不是libboinc_api,或者使用完整的文件名,就像你在第二次尝试中所做的那样。
在你最初的尝试中,CMake将尝试查找liblibboinc_api.so、liblibboinc_api.a,如果没有找到,则查找liblibboinc.so,最后查找liblibboinc.a。
请尝试这个:
FIND_LIBRARY(BOINC_LIBRARY_API NAMES boinc_api
             DOC "The Boinc API library")
FIND_LIBRARY(BOINC_LIBRARY NAMES boinc
             DOC "The Boinc library")

可能是相反的顺序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接