在我的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可能吗?
答案 0 :(得分: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_
)
<强>参考强>