CMake:如何根据构建类型生成不同的共享库名称

Posted

技术标签:

【中文标题】CMake:如何根据构建类型生成不同的共享库名称【英文标题】:CMake: How to generate different shared library names depending on build type 【发布时间】:2009-11-21 06:03:39 【问题描述】:

这是我第一次使用 CMake,我正在尝试构建 QJSon,一个用于 Qt 4.x 的 JSON 解析器。我想要的基本上是根据构建配置构建不同的输出库名称。我正在使用$CMAKE_BUILD_TYPE 宏来生成不同的目标(qjson.lib/qjson.dll 和 qjsond.lib/qjsond.dll)。似乎 VS 2008 解决方案始终使用 qjson 名称构建(调试构建时没有 qjsond)。

我可怕的 Makefile 指令部分如下:

       IF("$CMAKE_BUILD_TYPE" MATCHES "^Rel.*")
         add_library ( qjson SHARED $qjson_SRCS $qjson_MOC_SRCS)
         target_link_libraries( qjson $QT_LIBRARIES)

         set_target_properties( qjson PROPERTIES
                              VERSION $QJSON_LIB_MAJOR_VERSION.
    $QJSON_LIB_MINOR_VERSION.$QJSON_LIB_PATCH_VERSION
                              SOVERSION $QJSON_LIB_MAJOR_VERSION
                              DEFINE_SYMBOL QJSON_MAKEDLL
                              ) 

        INSTALL(TARGETS qjson
           LIBRARY DESTINATION $LIB_INSTALL_DIR
           RUNTIME DESTINATION bin
           ARCHIVE DESTINATION  $LIB_INSTALL_DIR
        )
        ENDIF("$CMAKE_BUILD_TYPE" MATCHES "^Rel.*")

        IF("$CMAKE_BUILD_TYPE" MATCHES "^Deb.*")
         add_library ( qjsond SHARED $qjson_SRCS $qjson_MOC_SRCS)
         target_link_libraries( qjsond $QT_LIBRARIES)

         set_target_properties( qjsond PROPERTIES
                              VERSION $QJSON_LIB_MAJOR_VERSION.
$QJSON_LIB_MINOR_VERSION.
$QJSON_LIB_PATCH_VERSION
                              SOVERSION $QJSON_LIB_MAJOR_VERSION
                              DEFINE_SYMBOL QJSON_MAKEDLL
                              ) 

        INSTALL(TARGETS qjsond
           LIBRARY DESTINATION $LIB_INSTALL_DIR
           RUNTIME DESTINATION bin
           ARCHIVE DESTINATION  $LIB_INSTALL_DIR
        )
        ENDIF("$CMAKE_BUILD_TYPE" MATCHES "^Deb.*")

有什么想法吗?当然有一个更简单的配置。谢谢。

【问题讨论】:

【参考方案1】:

http://www.cmake.org/cmake/help/cmake-2-8-docs.html#prop_tgt:OUTPUT_NAME_CONFIG

【讨论】:

更新链接:cmake.org/cmake/help/v2.8.8/…

以上是关于CMake:如何根据构建类型生成不同的共享库名称的主要内容,如果未能解决你的问题,请参考以下文章

制作。如何生成具有不同库类型的 Visual Studio 解决方案?

CMake:如何从子项目的所有静态库中创建一个共享库?

自定义库名称与系统库相同时的CMake循环依赖错误

为 dlib 创建共享库

(转)HelloWorld CMake CMake中构建静态库与动态库及其使用

项目构建工具CMake、GYP、GN