为CMake OBJECT库设置输出目录

3

在我的 CMake 文件中,我指定了一个对象库:

add_library(core OBJECT ${sourcefiles})

我在后面会进一步提到这一组目标文件在共享库中的使用:
add_library(sharedlib SHARED $<TARGET_OBJECTS:core>)

这个很好用,但是我想在不同的项目之间重复使用构建产物。 通过在sharedlib上设置LIBRARY_OUTPUT_PROPERTY,我可以将生成的.so文件指向一个公共目录:

set_target_properties(sharedlib PROPERTIES LIBRARY_OUTPUT_NAME /commondir)

然而,我似乎无法对核心(OBJECT)库做同样的事情 - .o文件总是最终出现在(特定于项目的)生成cmake-build目录中。

这意味着每个项目都需要重新构建(大型)共享库...

我是否做错了什么,或者CMake还不能实现这一点?

1个回答

3
您不能在CMake中更改对象/中间文件的输出目录。这是有意设计的(允许一个项目中存在多个相同的输出名称):这是由设计者决定的

"没有办法更改那个名称。 CMake在二进制树中创建源树的精确副本。"

但是,在3.9版本中,CMake学会了导出对象库:
cmake_minimum_required(VERSION 3.9)

project(CorePorject)

file(WRITE "core.cpp" "")
file(WRITE "helper.cpp" "")
set(sourcefiles "core.cpp" "helper.cpp")

add_library(core OBJECT ${sourcefiles})    

export(
    TARGETS core
    FILE core.cmake 
    NAMESPACE Core_
)

参考资料

注意:请勿删除HTML标签。

感谢澄清,这是设计上不可能的。导出选项很有趣,但它创建了一个 cmake 文件,该文件引用客户端项目中的 .o 文件 - 因此第二个客户端项目也将依赖于第一个客户端项目,而不是库项目,对吗? - edovino
1
@edovino 这主要是关于你如何分发你的项目的问题。有多少团队在开发这个项目?它是开源还是闭源的?你是否计划进行二进制交付?库文件是否始终位于目录树中相对于彼此的同一位置?我已经在这里讨论了其中一些问题(链接:https://dev59.com/alwZ5IYBdhLWcg3wYvgk 和 https://dev59.com/dFwX5IYBdhLWcg3wvRkf)。 - Florian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接