如何让cmake从安装中排除子目录?

时间:2013-07-27 05:51:57

标签: install cmake clang rpm libc++

我一直在尝试在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,鉴于我还是新手,我会很感激使用正确指令的提示/指针。

2 个答案:

答案 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 ...

,您的.so文件何时会被构建?