我正在使用 cmake 来管理我使用第三方库的项目。
此库可能已针对 libc++ 或 libstd++(取决于版本)进行编译/链接。
我知道如何告诉 cmake 将我的项目编译/链接到 libc++ 或 libstdc++,但我不知道如何检查我正在使用的库是否是根据 libc++ 或 libstd++ 编译/链接的。有任何 cmake 命令可以检查吗?
最佳答案
对于共享库,您可以使用 GetPrerequisites用于测试库是否依赖于 libstc++ 或 libc++ 的标准模块。
例如,以下代码测试 boost 的 program_options
库是否针对 libstc++ 或 libc++ 进行了编译:
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()
对于静态库,您可能必须求助于在库文件上运行 nm
以确定外部符号,然后在输出中搜索特征字符串,如 __gnu_
。
关于c++ - CMake 测试 : was a library compiled/linked against libc++ or libstd++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30095610/