2011-12-07 65 views

回答

1

你總是可以讓custom_target工作在你的libraryexecutable做特殊的東西。

如果你想在cmake的改變的鏈接器命令的最低水平。我所知道的是覆蓋CMAKE_CXX_LINK_EXECUTABLE -variable(對於C是CMAKE_C_LINK_EXECUTABLE)使用自己的連接器。如果這樣做,請注意該變量中的特殊<>字段。所有變量見here。下面的部分(擴展規則)顯示了可以在cmake的構建變量中使用的特殊「標籤」。

0

我有我的主要CMakeLists.txt

#----------------------------------------------------------------- 
# statifier determine (http://statifier.sourceforge.net/) for linux 
#----------------------------------------------------------------- 
set(FOOBAR-HAS-STATIFIER false) 

if (UNIX) 

    find_program(STATIFIER_EXE NAMES "statifier") 

    if (NOT STATIFIER_EXE STREQUAL STATIFIER_EXE-NOTFOUND) 

    set(FOOBAR-HAS-STATIFIER true) 

    macro(MAKE_STATIC_EXE _static_exe_out) 
     foreach (_target ${ARGN}) 
     set(_shared_exe "${CMAKE_CURRENT_BINARY_DIR}/${_target}") 
     set(_static_exe "${CMAKE_CURRENT_BINARY_DIR}/${_target}-static/${_target}") 
     add_custom_command(POST_BUILD 
      OUTPUT ${_static_exe} 
      COMMAND ${STATIFIER_EXE} --set=LD_BIND_NOW=yes ${_shared_exe} ${_static_exe} 
      DEPENDS ${_shared_exe} 
     ) 
     SET(${_static_exe_out} ${${_static_exe_out}} ${_static_exe}) 
     endforeach() 
    endmacro() 

    else() 

    message ("statifier (http://statifier.sourceforge.net/) not found. Can not build setup for unix") 

    endif() 

endif() 

,後來在主應用程序CMakeLists.txt

## 
## static foobar 
## 
if (FOOBAR-HAS-STATIFIER) 
    make_static_exe(FOOBAR-STATIC-dynstat dynstat) 
    message("${FOOBAR-STATIC-dynstat}") 
endif() 

一個succesfull建立後必須在build目錄一foobar和靜態foobar-static executeable。