是否可以告诉 cmake 链接到 静态库 而不是 shared ?
在我的 CMakeLists.txt
的顶部,我配置了以下内容:
set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
后来,我添加了一个二进制文件,并告诉它在发布模式下链接到 tcmalloc
:
target_link_libraries(${BIN_NAME} optimized tcmalloc_minimal)
生成的生成文件链接到 tcmalloc
的共享版本:
$ make VERBOSE=1 | grep tcmalloc
/usr/bin/c++ ... -Wl,-Bdynamic ltcmalloc_minimal
进一步证明:
$ ldd app
...
libtcmalloc_minimal.so.4 => /usr/local/lib/libtcmalloc_minimal.so.4 (0x00007eff89733000)
...
tcmalloc 的静态和共享版本都存在:
$ ls -1 /usr/local/lib/libtcmalloc_minimal*
/usr/local/lib/libtcmalloc_minimal.a
/usr/local/lib/libtcmalloc_minimal_debug.a
/usr/local/lib/libtcmalloc_minimal_debug.la
/usr/local/lib/libtcmalloc_minimal_debug.so
/usr/local/lib/libtcmalloc_minimal_debug.so.4
/usr/local/lib/libtcmalloc_minimal_debug.so.4.2.6
/usr/local/lib/libtcmalloc_minimal.la
/usr/local/lib/libtcmalloc_minimal.so
/usr/local/lib/libtcmalloc_minimal.so.4
/usr/local/lib/libtcmalloc_minimal.so.4.2.6
问题:
如何配置 cmake 以链接 tcmalloc
的静态版本?
原文由 Steve Lorimer 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以创建一个辅助函数,该函数在函数范围内设置
CMAKE_FIND_LIBRARY_SUFFIXES
( 因此不会影响父范围),该函数搜索相关库并使用结果设置输出变量然后,您可以从
CMakeLists.txt
中的某个位置调用此函数,以使用库的位置填充变量。找不到它会导致硬故障
然后,您可以在调用
target_link_libraries
时使用此变量,并确保您链接的是静态版本在这里你可以看到结果: