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

时间:2015-04-12 13:11:49

标签: c++ cmake static-linking

我有一个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做到这一点吗?

1 个答案:

答案 0 :(得分:0)

序言:您无法链接到可执行文件,因此您必须以构建内容的方式更改某些内容。

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

提议的解决方案:

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