Installation 如何使cmake从安装中排除子目录?
我一直在尝试在RHEL6.4上为Installation 如何使cmake从安装中排除子目录?,installation,cmake,clang,rpm,libc++,Installation,Cmake,Clang,Rpm,Libc++,我一直在尝试在RHEL6.4上为libc++3.3构建RPM包。我需要静态库和共享库。因此,我学习了cmake的一些基础知识,然后修改了捆绑的CMakeList.txt。让那部分工作 但由于在RHEL 6.x中,所有64位库都应该转到/usr/lib64而不是/usr/lib,因此我一直在尝试使用以下方法来完成这项工作: (A) 在建筑过程中,我使用 SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib${LIB_SUFFIX}) 使所有库文件(*
libc++
3.3构建RPM
包。我需要静态库和共享库。因此,我学习了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(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
中也安装了共享库
但共享库的副本仍安装在生成的RPM中的/usr/lib
中。我怎样才能预防它
如果要编写RPMspec
文件,则\u libdir
宏会自动处理此问题。有了cmake
,鉴于我对它还是新手,我希望您能给我一个关于正确使用指令的提示/指针。我能看到:
1) ARCHIVE\u OUTPUT\u目录${PROJECT\u BINARY\u DIR}/lib${lib\u SUFFIX}
中缺少一个空格,应该是ARCHIVE\u OUTPUT\u目录${PROJECT\u BINARY\u DIR}/lib${lib SUFFIX}
2) 如果您使用添加库(c++静态…
?我能看到的内容:
1) ARCHIVE\u OUTPUT\u目录${PROJECT\u BINARY\u DIR}/lib${lib\u SUFFIX}
中缺少一个空格,应该是ARCHIVE\u OUTPUT\u目录${PROJECT\u BINARY\u DIR}/lib${lib SUFFIX}
2) 如果您使用
ADD\u库,您的.so文件将在何时生成(c++STATIC…
?事实上,有了cmake
邮件列表中的一位有用的人,我现在可以在生成的spec
文件中删除%dir/usr/lib
。实际上非常简单:只需将cd插入$cmake\u SOURCE\u dir/lib
并在那里编辑CMakeLists.txt
。追加${lib后缀}
到两个安装目标
s。在build
子目录中重新生成Makefile
,然后make&&makepackage
。所有库文件根据需要进入/usr/lib64
。事实上,在cmake
邮件列表中有了一位有帮助的人,我现在可以摆脱%dir/usr/lib
在生成的spec
文件中。实际上非常简单:只需将cd刻录到$CMAKE\u SOURCE\u dir/lib
并在那里编辑CMakeLists.txt
即可。追加${lib\u后缀}
到两个安装目的地s。在build
子目录中重新生成Makefile
,然后make&&makepackage
。所有库文件根据需要进入/usr/lib64
。提出问题的另一种方式可能是:如何确保在RHEL的/usr/lib64中安装库6.x平台-迄今为止数据中心最流行的服务器平台?另一种选择可能是如何使用cmake
配置cpack
,以便从生成的spec
文件中排除某个%dir
?您能否指定:1.完成后生成树的状态/文件的位置建筑2.运行安装3后文件在哪里?您希望文件在哪里instead@Antonio:感谢您的回复。关于您的Qs:1。状态:成功生成,无错误。位置:$HOME/clang3.3/libs/build\u libcxx
(我总是使用源代码外生成);2.$HOME/clang3.3/libs/build_libcxx/lib64
;3.共享库和静态库都指向/usr/lib64
。现在是共享库文件。因此也出现在/usr/lib
-IMHO中。我认为本文给出的提示可能会有所帮助:也许更好的方法是创建我自己的CMakeLists.txt
,添加两个libraries,安装include文件,然后使用它。摆出问题的另一种方式可能是:如何确保在RHEL 6.x平台上的/usr/lib64中安装库?迄今为止,RHEL 6.x平台是数据中心最流行的服务器平台。另一种选择可能是如何使用cmake
配置cpack
,以便生成的spec
文件中排除了%dir
吗?能否指定:1.生成树的状态/生成完成后的文件位置2.运行安装后文件在哪里3.您希望文件在哪里instead@Antonio:感谢您的回复。关于您的Qs:1。状态:成功建造d没有错误。位置:$HOME/clang3.3/libs/build\u libcxx
(我总是使用源代码外版本);2.$HOME/clang3.3/libs/build_libcxx/lib64
;3.共享库和静态库都指向/usr/lib64
。现在是共享库文件。因此也出现在/usr/lib
-IMHO中。我认为本文给出的提示可能会有所帮助:也许更好的方法是创建我自己的CMakeLists.txt
,添加两个libraries,安装include文件,然后使用它。我一直在想也许我应该使用原始的CMakeList.txt
并修改它,直到它在/usr/lib64
中安装生成的共享库为止(对于64位库构建)与现在的/usr/lib
不同。但是作为cmake
的新手,我需要做一些研究。原始版本没有明确的目标(cxx
目标是“隐式”定义的。1)修复。编辑原始帖子。这是由于剪切粘贴。我真正的CMakeLists.txt
确实有空间。2)根据我的make-j4