【问题标题】:Cmake install header without a specific method没有特定方法的Cmake安装标头
【发布时间】:2013-07-23 07:26:04
【问题描述】:

我制作了一个小型库,除了需要 Imagemagick 的类中的一个可选方法外,它是独立的。因此,如果机器没有安装 Imagemagick,我希望不编译该方法;而不是简单地失败。唯一的问题是头文件仍然定义了该方法(尽管它没有被编译)。有没有办法使用 Cmake 或其他方法从标头中删除该方法?

【问题讨论】:

    标签: header installation cmake shared-libraries


    【解决方案1】:

    将定义包装在预处理器定义中:

    #ifdef HAVE_IMAGEMAGICK
      void myFunctionDefinition(void);
    #endif
    

    然后,在 CMake 中,如果找到 ImageMagick,则将定义添加到项目中。 CMake 会将该定义传递给编译器的命令行,编译器将定义预处理器令牌。

    IF(IMAGEMAGICK_FOUND)  # or whatever CMake variable holds this info
        ADD_DEFINITIONS(-DHAVE_IMAGEMAGICK)
    ENDIF()
    

    或者,如果您有很多这样的定义,您可以考虑使用包含文件来保存所有这些配置。然后,CMake 命令 CONFIGURE_FILE 可以一次展开整个文件的所有配置语句。

    【讨论】:

    • 虽然这可以构建库,但它不会删除标题中的声明。因此 IDE 仍然会检测到该方法的存在,即使它已被定义。目前,我只是创建了一个异常,如果在未编译 Imagemagick 时调用它,则将其抛出。不过输入很好:)
    猜你喜欢
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 2013-12-29
    相关资源
    最近更新 更多