【发布时间】:2023-01-27 22:22:24
【问题描述】:
CMake中有一个对象库:
add_library( librevolta_runtime_x86 OBJECT
crt0.S
crti.S
crtn.S
)
install( TARGETS librevolta_runtime_x86 EXPORT revolta
OBJECTS DESTINATION "${CMAKE_INSTALL_PREFIX}/lib"
)
链接到我的静态库:
add_library( revolta STATIC )
target_link_libraries( revolta
PUBLIC
librevolta-runtime-x86
)
# Install all the revolta headers into include directory and copy the built library
install( TARGETS revolta EXPORT revolta
FILE_SET HEADERS DESTINATION "${CMAKE_INSTALL_PREFIX}/include"
ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/lib"
)
# Export librevolta targets
install( EXPORT revolta DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/cmake/revolta" )
问题是一旦构建并安装了库revota,结果是:
<CMAKE_INSTALL_PREFIX>/lib/objects-Debug/librevolta-runtime-x86/crt0.S.obj
<CMAKE_INSTALL_PREFIX>/lib/objects-Debug/librevolta-runtime-x86/crti.S.obj
<CMAKE_INSTALL_PREFIX>/lib/objects-Debug/librevolta-runtime-x86/crtn.S.obj
但是我需要像这样进行安装:
<CMAKE_INSTALL_PREFIX>/lib/crt0.o
<CMAKE_INSTALL_PREFIX>/lib/crti.o
<CMAKE_INSTALL_PREFIX>/lib/crtn.o
注意:<CMAKE_INSTALL_PREFIX> 只是 CMake 变量中指定路径的占位符。
所以我需要:
-
将目标文件从
*.S.obj重命名为简单的*.o -
调整路径,以便将所有目标文件安装到纯
<CMAKE_INSTALL_PREFIX>/lib/目录中 -
由于
target_link_libraries(...)依赖,补上librevolta_runtime_x86revolta导出集的成员非常感谢任何愿意帮助我的人。马丁
【问题讨论】:
-
有点离题,但您应该避免将
$[CMAKE_INSTALL_PREFIX}添加到DESTINATION。相对目标(例如lib或include)始终被认为是相对于安装目录的,这样做的一个很好的副作用是 - 它使包在安装时可重定位。要使包知道特定于分发的安装目录,您可以使用include(GNUInstallDirs)模块,尤其是它的变量${CMAKE_INSTALL_LIBDIR}、${CMAKE_INSTALL_INCLUDEDIR}和其他变量。 -
@vre 感谢您的提示,我可以确认,一旦 ${CMAKE_INSTALL_LIBDIR} 被删除,它仍然指向正确的目录。
-
我已经回答了你问题的一部分,但因为我正在打电话 - 我无法让自己回答更多。如果其他人无法完全回答,我可能会在周六/周日回复。
标签: cmake