如何让 CMake 使用现有的 Makefile? [英] How to get CMake to use existing Makefile?

查看:86
本文介绍了如何让 CMake 使用现有的 Makefile?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个现有的项目 (wvdial),它有一个可用的 makefile.我正在尝试将它集成到我们使用 CMake 的主要构建过程中.任何人都可以建议如何做到这一点?我根据我们构建的一些其他项目进行了下面的尝试,但从未调用过 makefile.我想要做的就是调用 wvdial 的 makefile 并将二进制文件包含在我们构建的 .deb 包中.

<前>cmake_minimum_required(版本 2.6)SET(COMPONENT_NAME 根供应商 wvdial)设置(DEBIAN_PACKAGE_VERSION 1.6.1)设置(WVDIAL_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})设置(WVDIAL_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})设置(WVDIAL_INSTALLED ${CMAKE_CURRENT_BINARY_DIR})ADD_CUSTOM_TARGET(wvdial ALL取决于 ${WVDIAL_INSTALLED})如果(${ROOTS_TARGET_ARCHITECTURE} STREQUALarmhf")SET(TARGET_FLAG "--host=arm-linux-gnueabihf")万一()ADD_CUSTOM_COMMAND(WORKING_DIRECTORY ${WVDIAL_BINARY_DIR}输出 ${WVDIAL_INSTALLED}命令环境 CXXFLAGS=${ROOTS_COMPILER_FLAGS} ./configure ${TARGET_FLAG} ${ROOTS_HOST_OPTION}命令制作评论构建 wvdial"逐字)安装(文件 ${CMAKE_CURRENT_BINARY_DIR}/wvdial目的地 usr/local/bin组件 ${COMPONENT_NAME}权限 OWNER_EXECUTE OWNER_READ OWNER_WRITE GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ)DEFINE_DEBIAN_PACKAGE(姓名 ${COMPONENT_NAME}CONTROL_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/debian/controlCHANGELOG_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/debian/changelog)

解决方案

查看ExternalProject 模块.

这将向您的 CMake 项目添加一个虚拟目标,该目标负责构建依赖项.该命令非常复杂,并且支持很多在您的情况下您可能不需要的东西.Kitware(CMake 背后的公司)做了一个 不错的帖子 使用 CMake 2.8 构建外部项目 不久前解释了该命令的基本用法.

I have an existing project (wvdial) that has a working makefile. I'm trying to integrate it into our main build process which uses CMake. Can anyone advise on how to do this? I made an attempt below based on some of the other projects we build but the makefile is never called. All I want to do is call the makefile for wvdial and include the binary in the .deb package we build.

    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
    )

解决方案

Take a look at the ExternalProject module.

This will add a dummy target to your CMake project that is responsible for building the dependency. The command is quite complex and supports a lot of stuff that you probably won't need in your case. Kitware (the company behind CMake) did a nice post called Building External Projects with CMake 2.8 a while back explaining the basic use of that command.

这篇关于如何让 CMake 使用现有的 Makefile?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆