CMake:FIND_LIBRARY问题

Vin*_*ent 4 linker cmake find

我的目标是通过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})
Run Code Online (Sandbox Code Playgroud)

但是CMake没有找到任何东西.

所以我尝试(使用扩展名):

    FIND_LIBRARY(BOINC_LIBRARY NAMES libboinc_api.a libboinc.a
             DOC "The Boinc libraries")
    MESSAGE(${BOINC_LIBRARY})
Run Code Online (Sandbox Code Playgroud)

并且消息给了我/usr/lib/libboinc_api.a.

所以我的问题是:

1)为什么我被迫精确扩展(在cmake FIND模块中,没有精确的扩展)以及如何避免这种情况?

2)如何链接这两个文件?(在目前的情况下,消息说只找到第一个,但也许我误解了......)

非常感谢你.

Tor*_*sen 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")
Run Code Online (Sandbox Code Playgroud)

可能是以相反的顺序.