cmake,我可以从可执行对象构建一个库吗
cmake, can I build a library from an executable objects
我有一个用 cmake 构建的 c++ 项目。
add_executable(app foo.cpp bar.cpp main.cpp)
我想在测试项目中使用 foo.cpp
和 bar.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.o
和 bar.o
.
更改应用构建系统和 link test
你知道我如何用 cmake 做到这一点吗?
序言:您不能 link 到可执行文件,因此您必须更改构建内容的方式。
评论中提出的一些方案是有风险的。不要直接 linking 到目标文件,当你改变任何东西时,你最终会非常痛苦地试图找到你的目标文件最终的位置,cmake 旨在简化这类事情,一般建议是为您的项目使用正确的架构。
建议的解决方案:
- 只需将您的 foobar 库设为静态库即可
add_library(foobar STATIC foo.cpp bar.cpp)
并保留您一开始提出的代码。
- 或者,看看sakra提案(object libraries),这很好。
我有一个用 cmake 构建的 c++ 项目。
add_executable(app foo.cpp bar.cpp main.cpp)
我想在测试项目中使用 foo.cpp
和 bar.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.o
和 bar.o
.
test
你知道我如何用 cmake 做到这一点吗?
序言:您不能 link 到可执行文件,因此您必须更改构建内容的方式。
评论中提出的一些方案是有风险的。不要直接 linking 到目标文件,当你改变任何东西时,你最终会非常痛苦地试图找到你的目标文件最终的位置,cmake 旨在简化这类事情,一般建议是为您的项目使用正确的架构。
建议的解决方案:
- 只需将您的 foobar 库设为静态库即可
add_library(foobar STATIC foo.cpp bar.cpp)
并保留您一开始提出的代码。 - 或者,看看sakra提案(object libraries),这很好。