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

cmake, can I build a library from an executable objects

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

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

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

我知道我可以构建一个库,然后在两个项目中 link: 喜欢:

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)

但我宁愿不针对对象 foo.obar.o.

更改应用构建系统和 link test

你知道我如何用 cmake 做到这一点吗?

序言:您不能 link 到可执行文件,因此您必须更改构建内容的方式。

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

建议的解决方案:

  • 只需将您的 foobar 库设为静态库即可 add_library(foobar STATIC foo.cpp bar.cpp) 并保留您一开始提出的代码。
  • 或者,看看sakra提案(object libraries),这很好。