在我的 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(使用前将#替换为@)