【问题标题】:Set output directory for CMake OBJECT libraries为 CMake OBJECT 库设置输出目录
【发布时间】:2017-09-20 19:12:54
【问题描述】:

在我的 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 可能吗?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    您不能在 CMake 中更改对象/中间文件的输出目录。 That's by design(允许在一个项目中使用多个相同的输出名称):

    “无法更改该名称。 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_
    )
    

    参考文献

    【讨论】:

    • 感谢您澄清这在设计上是不可能的。导出选项很有趣,但这会创建一个 cmake 文件,该文件引用客户端项目 inside 的 .o 文件 - 因此第二个客户端项目也将依赖于第一个客户端项目,而不是库项目,对吧?
    • @edovino 这主要是关于您希望如何分发项目的问题。有多少团队正在为此努力?它是开源的还是闭源的?您是否计划进行二进制交付?这些库是否总是在目录树中相对于彼此位于同一位置?其中一些问题我已经讨论过herehere
    猜你喜欢
    • 2021-10-23
    • 2011-04-14
    • 2016-01-20
    • 2021-12-07
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    相关资源
    最近更新 更多