【问题标题】:CMAKE - makefile target for a libraryCMAKE - 库的生成文件目标
【发布时间】:2019-04-12 12:34:55
【问题描述】:

我目前正在更改我的项目的构建系统,从 gnu makefiles 到 cmake(生成 makefiles)。

我的项目生成了几个库 (.lib) 和几个可执行文件 (.exe)。

目前我使用以下命令生成生成文件:

cmake -G "Unix Makefiles" .. -DCMAKE_BUILD_TYPE=Debug

生成的 makefile 包含一个 all 目标,以及每个可执行文件的目标(使用 add_executable cmake 指令编译),所以我可以编译项目的一个子集(这节省了大量时间) : make executable_1; make executable_2 等等。

但是,库没有目标(使用 add_library cmake 指令编译),所以我不能做 make library_1 例如。我想这样做是因为这样可以节省很多时间。

我试图在库的 cmake 中添加一个虚拟可执行文件,并将库链接到这个可执行文件(它只包含一个 main,而没有实际使用 library_1 的代码)。

add_library(library_1 test.cpp)
add_executable(dummy_exe dummy_main.cpp)
target_link_library(dummy_exe library_1)

它确实为 dummy_exe 添加了一个目标,但不构建库,因为它实际上不需要链接任何 library_1 的代码。

无论如何,这是一种变通方法,毕竟我宁愿打电话给make library_1。有没有办法使用 cmake 为库添加 makefile 目标?

【问题讨论】:

  • 使用add_library应该在Makefile中创建一个目标,也许你忽略了它?如果您确定它没有被创建,请创建一个最小示例并详细说明您的环境(CMake 版本、操作系统)。
  • make help 将列出所有已知目标,对我来说确实列出了库目标。

标签: cmake


【解决方案1】:

正如 w-m 和 Fred 所回答的,CMAKE 确实为 Makefile 中的库创建了一个目标。

我试图用库的 cmake 子项目名称而不是库名称来构建库。

make help 确实对发现这个问题有很大帮助,因为它列出了可以构建的所有内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 2017-10-19
    • 2015-01-25
    相关资源
    最近更新 更多