4

私のCMakeスクリプトでは、プロジェクトがリンクされているさまざまなライブラリ、gccのさまざまなタイプのリンクを指定する必要があります。この種のミキシングの使用-Wl,-Bstaticとオプションはよく知られています。-Wl,-Bdynamicしかし、cmakeスクリプトでこれを何らかの方法で指定することは可能ですか?

4

2 に答える 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 ビルドでは機能しません。これは、常に.libVisual 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 に答える