设置 CMake OBJECT 库的输出目录

2024-05-04

在我的 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)

但是,我似乎无法对核心(对象)库做同样的事情 - .o 文件总是最终出现在(特定于项目的)生成的 cmake-build 目录中。 这意味着每个项目无论如何都必须重建(大)共享库......

我做错了什么吗,还是 CMake 还不能做到这一点?


您无法更改 CMake 中对象/中间文件的输出目录。这是设计使然 https://public.kitware.com/pipermail/cmake/2004-October/005649.html(在一个项目中允许多个相同的输出名称):

“没有办法改变这个名字。 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 设置 C++ 目标文件输出位置 https://stackoverflow.com/questions/17174527/set-c-object-file-output-location-with-cmake
  • 在 CMake 中设置中间文件(如 .obj)的目录 https://stackoverflow.com/questions/28831402/set-the-directory-for-intermediate-files-like-obj-in-cmake
  • 使其他 cmake 包自动访问 cmake 库 https://stackoverflow.com/questions/33462209/making-cmake-library-accessible-by-other-cmake-packages-automatically
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设置 CMake OBJECT 库的输出目录 的相关文章

随机推荐