Cmake测试:是一个针对libc ++或libstd ++编译/链接的库?

Iss*_* T. 4 c++ cmake libstdc++ libc++

我正在使用cmake来管理使用第三方库的项目.

该库可以针对libc ++或libstd ++进行编译/链接(具体取决于版本).

我知道如何告诉cmake针对libc ++或libstdc ++编译/链接我的项目,但我不知道如何检查我使用的库是否是针对libc ++或libstd ++编译/链接的.是否有任何cmake命令来检查?

sak*_*kra 5

对于共享库,您可以使用GetPrerequisites标准模块来测试库是否依赖于libstc ++或libc ++.

例如,以下代码测试是否program_options针对libstc ++或libc ++编译了boost的库:

set (_library "/usr/local/lib/libboost_program_options.dylib")
set (_prequesites "")
set (_exclude_system FALSE)
set (_recurse FALSE)
set (_exePath "")
set (_searchDirs "")
get_prerequisites(${_library} _prequesites ${_exclude_system} ${_recurse} "${_exePath}" "${_searchDirs}")
if (_prequesites MATCHES "/libstdc\\+\\+")
    message("using libstc++")
elseif (_prequesites MATCHES "/libc\\+\\+")
    message("using libc++")
else()
    message("using neither libstc++ nor libc++")
endif()
Run Code Online (Sandbox Code Playgroud)

对于静态库,您可能不得不求助于nm在库文件上运行以确定外部符号,然后__gnu_在输出中搜索特征字符串.