2013-08-21 42 views
18

我有一個現有的項目(wvdial)有一個工作的生成文件。我試圖將它集成到使用CMake的主構建過程中。任何人都可以建議如何做到這一點?我基於我們構建的其他項目做了一個嘗試,但是makefile永遠不會被調用。我所要做的就是調用wvdial的makefile,並將二進制文件包含在我們構建的.deb軟件包中。如何讓CMake使用現有的Makefile?

謝謝 肖恩

 
    cmake_minimum_required(VERSION 2.6) 

    SET(COMPONENT_NAME roots-vendor-wvdial) 

    SET(DEBIAN_PACKAGE_VERSION 1.6.1) 

    SET(WVDIAL_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) 
    SET(WVDIAL_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) 
    SET(WVDIAL_INSTALLED ${CMAKE_CURRENT_BINARY_DIR}) 

    ADD_CUSTOM_TARGET(
     wvdial ALL 
     DEPENDS ${WVDIAL_INSTALLED} 
    ) 

    IF (${ROOTS_TARGET_ARCHITECTURE} STREQUAL "armhf") 
     SET(TARGET_FLAG "--host=arm-linux-gnueabihf") 
    ENDIF() 

    ADD_CUSTOM_COMMAND(
     WORKING_DIRECTORY ${WVDIAL_BINARY_DIR} 
     OUTPUT ${WVDIAL_INSTALLED} 
     COMMAND env CXXFLAGS=${ROOTS_COMPILER_FLAGS} ./configure ${TARGET_FLAG} ${ROOTS_HOST_OPTION} 
     COMMAND make 
     COMMENT "Building wvdial" 
     VERBATIM 
    ) 


    INSTALL(
     FILES ${CMAKE_CURRENT_BINARY_DIR}/wvdial 
     DESTINATION usr/local/bin 
     COMPONENT ${COMPONENT_NAME} 
     PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ 
    ) 

    DEFINE_DEBIAN_PACKAGE(
     NAME ${COMPONENT_NAME} 
     CONTROL_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/debian/control 
     CHANGELOG_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/debian/changelog 
    ) 

回答

20

看看在ExternalProject模塊。

這將爲您的CMake項目添加一個虛擬目標,負責構建依賴關係。這個命令非常複雜,支持很多你可能不需要的東西。 Kitware(CMake背後的公司)在解釋該命令的基本用法的同時做了nice post called Building External Projects with CMake 2.8

+1

Kitware移動了你的鏈接。更新鏈接在這裏:https://blog.kitware.com/wp-content/uploads/2016/01/kitware_quarterly1009.pdf – Matt

+0

@Matt感謝您的通知,我相應地編輯了答案。 – ComicSansMS