1

我一直在尝试在 RHEL 6.4 机器上构建 3.3 的RPM软件包。libc++我需要静态库和共享库。所以,我学习了一些基础知识,cmake然后修改了捆绑的CMakeList.txt. 让那部分工作。

但是由于在 RHEL 6.x 中,所有 64 位库都应该转到/usr/lib64而不是/usr/lib,所以我一直在尝试使用以下方法来完成工作:

(A) 在构建过程中,我使用

SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib${LIB_SUFFIX})

让所有库文件 (*.so**.a) 位于lib64而不是lib.

(B) 使用ADD_LIBRARY...如下所示的命令

ADD_LIBRARY(c++ STATIC ...

和...一起

set_target_properties(c++ PROPERTIES
   ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib${LIB_SUFFIX})
   INSTALL(TARGETS c++ 
         ARCHIVE DESTINATION lib${LIB_SUFFIX})

获取安装在/usr/lib64.

(C) 此外,与

INSTALL(FILES ${PROJECT_BINARY_DIR}/lib${LIB_SUFFIX}/libc++.so DESTINATION lib${LIB_SUFFIX})
INSTALL(FILES ${PROJECT_BINARY_DIR}/lib${LIB_SUFFIX}/libc++.so.1 DESTINATION lib${LIB_SUFFIX})
INSTALL(FILES ${PROJECT_BINARY_DIR}/lib${LIB_SUFFIX}/libc++.so.1.0 DESTINATION lib${LIB_SUFFIX})

也安装了共享库/usr/lib64

但是共享库的副本仍然安装在/usr/lib生成的 RPM 中。我该如何预防?

如果我要编写一个 RPMspec文件,_libdir宏会自动处理它。考虑cmake到我仍然是新手,我会很感激关于正确使用指令的提示/指针。

4

2 回答 2

1

实际上,在cmake邮件列表中有一个乐于助人的人,我现在可以摆脱%dir /usr/lib生成spec文件中的 。这实际上很简单:只需 cd 到那里$CMAKE_SOURCE_DIR/lib并编辑CMakeLists.txt它。追加${LIB_SUFFIX}到两个 install DESTINATIONMakefile在子目录中重新生成build,然后make && make package. 所有库文件都按需要进入/usr/lib64

于 2013-07-28T05:06:44.987 回答
0

我能看到的:

1) 中缺少空格ARCHIVE_OUTPUT_DIRECTORY${PROJECT_BINARY_DIR}/lib${LIB_SUFFIX}),应该是ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib${LIB_SUFFIX})

2) 如果您使用 .so 文件,什么时候构建ADD_LIBRARY(c++ STATIC ...

于 2013-07-27T23:28:17.573 回答