cmake,我可以从可执行对象构建一个库吗?

cmake, can I build a library from an executable objects

本文关键字:一个 我可以 可执行 构建 对象 cmake      更新时间:2023-10-16

我有一个使用 cmake 构建的 c++ 项目。

add_executable(app foo.cpp bar.cpp main.cpp)

我想在测试项目中使用 foo.cppbar.cpp

我知道我可以构建一个库,然后将其链接到两个项目中:喜欢:

add_library(foobar foo.cpp bar.cpp)
add_executable(app main.cpp)
target_link_library(app foobar)
add_executable(test test.cpp)
target_link_library(test foobar)

但我宁愿不更改应用程序构建系统并将test链接到对象foo.obar.o

你知道我怎么能用cmake做到这一点吗?

前言:你不能链接到可执行文件,所以你必须改变你构建东西的方式。

评论中提出的一些解决方案是有风险的。不要直接链接到目标文件,当你改变任何东西时,你最终会很痛苦地试图找到你的目标文件在哪里,cmake 旨在简化这类事情,一般建议是为您的项目使用正确的架构。

建议的解决方案:

  • 只需将 foobar 库设为静态库add_library(foobar STATIC foo.cpp bar.cpp)并保留您在开始时提出的代码即可。
  • 或者,看看 sakra 提案(对象库),这很好。
相关文章: