私のCMakeスクリプトでは、プロジェクトがリンクされているさまざまなライブラリ、gccのさまざまなタイプのリンクを指定する必要があります。この種のミキシングの使用-Wl,-Bstatic
とオプションはよく知られています。-Wl,-Bdynamic
しかし、cmakeスクリプトでこれを何らかの方法で指定することは可能ですか?
2 に答える
2
Linux/MacOSX で CMake の優先検索順序を調整するいくつかのマクロを使用して、動的にリンクされたライブラリと静的にリンクされたライブラリを切り替えます。
macro( prefer_static )
if( NOT WIN32 )
list( REMOVE_ITEM CMAKE_FIND_LIBRARY_SUFFIXES ".a" )
list( INSERT CMAKE_FIND_LIBRARY_SUFFIXES 0 ".a" )
endif()
endmacro()
macro( prefer_dynamic )
if( NOT WIN32 )
list( REMOVE_ITEM CMAKE_FIND_LIBRARY_SUFFIXES ".a" )
list( APPEND CMAKE_FIND_LIBRARY_SUFFIXES ".a" )
endif()
endmacro()
次に、 orを呼び出す前に、適切なprefer_static()
orprefer_dynamic()
ルーチンを呼び出します。これには、静的ライブラリが利用できない場合、またはその逆の場合に共有ライブラリに「フォールバック」するという利点があります。find_library(...)
find_package(...)
これは Windows ビルドでは機能しません。これは、常に.lib
Visual Studio を使用してファイルにリンクし、(AFAIK)それが静的ライブラリか動的ライブラリかを判断する簡単な方法がないためです。
于 2013-05-09T10:36:04.213 に答える
0
CMake ではfind_library
、この目的に使用できます。
find_library(VAR libMyLib.a)
またSET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") find_library(VAR MyLib)
于 2013-05-09T10:24:47.007 に答える