2011-12-07 27 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。