我一直在尝试在RHEL 6.4框上为RPM
3.3构建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中。我该如何预防?
如果我要编写RPM spec
文件,_libdir
宏会自动处理此问题。对于cmake
,鉴于我还是新手,我会很感激使用正确指令的提示/指针。
答案 0 :(得分:1)
实际上,在cmake
邮件列表中有帮助的人员,我现在能够删除生成的%dir /usr/lib
文件中的spec
。它实际上很简单:只需cd到$CMAKE_SOURCE_DIR/lib
并在那里编辑CMakeLists.txt
。将${LIB_SUFFIX}
附加到两个安装DESTINATION
。重新生成Makefile
子目录中的build
,然后make && make package
。所有库文件都根据需要进入/usr/lib64
。
答案 1 :(得分:0)
我可以看到:
1)ARCHIVE_OUTPUT_DIRECTORY${PROJECT_BINARY_DIR}/lib${LIB_SUFFIX})
中缺少空格,应为ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib${LIB_SUFFIX})
2)如果您使用ADD_LIBRARY(c++ STATIC ...
?