如何在 KDevelop 中开发共享库?

Posted

技术标签:

【中文标题】如何在 KDevelop 中开发共享库?【英文标题】:How to develop shared library in KDevelop? 【发布时间】:2011-11-17 18:46:04 【问题描述】:

我想在 KDevelop 中开发共享库。但我没有看到任何库模板。

我想我必须从 c++ 模板创建项目并在两个项目中编辑 CMake 文件。不幸的是,我没有使用 CMake 开发库的经验,我也希望与 KDevelop 很好地集成 - 当我构建/运行使用该库的项目时自动构建库。

【问题讨论】:

【参考方案1】:

要创建库,请使用add_library 命令:

add_library(<name> [STATIC | SHARED | MODULE]
          [EXCLUDE_FROM_ALL]
          source1 source2 ... sourceN)

例如:

add_library(mylib SHARED
    a.h
    a.cpp
    b.h
    b.cpp)

将从列出的四个文件创建一个共享库。

如果您的程序(使用add_executable 创建)使用该库,当您使用target_link_libraries 指定链接时,CMake 将添加依赖项,因此如果您更改了 a.cppmylib 将被重建,您的应用程序将被重新链接。

例如

add_executable(myprog
    main.cpp)

target_link_libraries(myprog
    mylib)

编辑:

当你的库和项目在不同的文件夹中时,你可以使用add_subdirectory

在每个目录下创建一个CMakeList.txt,在library文件夹中使用add_library,在应用程序中使用add_programtarget_link_libraries

在父文件夹中使用add_subdirectory,先添加库文件夹,再添加程序文件夹。这将使该库对应用程序可用。然后针对父级 CMakeList 运行 cmake。

【讨论】:

但是库和应用程序是不同的项目,在不同的文件夹中。那么如何让 ProjectApplication 了解 ProjectLibrary? @MiroK 我已经扩展了我的答案以包括 add_subdirectory 使用。 AFAIK,没有必要在 add_library() 中包含标题。是真的吗? 虽然它不需要编译,但最好包含它们,以便在标头中的更改会导致重新编译。 Make 和其他构建工具通常只检查最后修改时间,因此它们包含在其他文件中的事实不会导致更改被拾取,并触发重新编译。 @kravemir 如果这篇文章回答了你的问题,请标记它。

以上是关于如何在 KDevelop 中开发共享库?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 KDevelop 中为基于 automake 的项目添加自定义构建步骤?

如何在多个库之间共享上下文?

如何在共享的 Windows 机器上创建一个所有开发人员都可以推送到的 git 存储库

Qt的IDE开发环境(KDevelop,MonKey Studio,QDevlop,Dev-cpp,Cobras,Edyuk)

如何在 KMM(kotlin 本机)共享模块中读取 Swift 框架库中生成的对象数组

如何使用 Webpack 建立一个私有的 React 组件共享库