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
。
我知道我可以构建一个库,然后将其链接到两个项目中:喜欢:
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.o
和bar.o
。
你知道我怎么能用cmake做到这一点吗?
前言:你不能链接到可执行文件,所以你必须改变你构建东西的方式。
评论中提出的一些解决方案是有风险的。不要直接链接到目标文件,当你改变任何东西时,你最终会很痛苦地试图找到你的目标文件在哪里,cmake 旨在简化这类事情,一般建议是为您的项目使用正确的架构。
建议的解决方案:
- 只需将 foobar 库设为静态库
add_library(foobar STATIC foo.cpp bar.cpp)
并保留您在开始时提出的代码即可。 - 或者,看看 sakra 提案(对象库),这很好。
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- C++-我可以创建另一个类的成员并在构造函数中使用它吗
- 在一个读写器队列中,我可以用volatile替换原子吗
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 我可以将迭代器递增一个整数吗?
- 如果需要转换,我可以在读取参数的同时将其移动到另一个参数吗?
- 我可以在具有一个标头和一个接口的 cpp 文件中有多个嵌入吗?
- 我可以有一个 ELI5 作为参考和指针以及何时使用它们吗?
- 而不是那么多的 if 语句,我想要一个逻辑,我可以用一个语句或优化的方式来完成
- 为什么我可以使用 memcpy 将一个对象变量复制到另一个对象变量
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 通过将其中一个模板更改为 muliset 后,我可以在 PBDS 排序集上使用计数功能<int>less_equal<int>
- 有没有办法我可以在 C++ 中使用 if 语句来说明如果一个字符串不是两个名称的 eqal,它会给出一个输出,ATM i
- 我可以得到一个字符 * 到一个 std::sregex_iterator 匹配 str() 吗?
- 当我可以在头文件中声明和定义所有文件时,为什么要创建一个.cpp文件?
- 我可以定义一个 constexpr 匿名/未命名变量吗?
- 如何将 c++ 类包装到 python 中,以便我可以使用 pybind11 访问其成员的公共方法(成员是一个对象指针)
- 我可以使用 constexpr 函数声明一个静态数组吗?