2013-05-04 43 views
4

在我的CMake腳本中,我需要爲不同的庫指定,即我的項目鏈接到gcc的不同類型的鏈接。衆所周知,使用-Wl,-Bstatic-Wl,-Bdynamic這樣的混合選項。但是有可能在cmake腳本中以某種方式指定它?如何在CMake中指定鏈接類型?

回答

1

我們用了幾個宏在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() 

我們再調用適當的prefer_static()prefer_dynamic()之間切換在致電find_library(...)find_package(...)之前的例行程序。當靜態庫不可用時,這具有共享庫的「回退」優勢,反之亦然。

這對於Windows版本不起作用,因爲您始終使用Visual Studio和(AFAIK)鏈接到.lib文件,因此沒有直接的方法來確定它是靜態還是動態庫。

+0

可以增強宏觀找到用戶定義路徑也圖書館!很好的邏輯。 – bikram990 2013-05-09 11:22:55

0

在CMake的find_library可以用於此目的。

find_library(VAR libMyLib.a) OR SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") find_library(VAR MyLib)