Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Installation 如何使cmake从安装中排除子目录?_Installation_Cmake_Clang_Rpm_Libc++ - Fatal编程技术网

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

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}) 使所有库文件(*

我一直在尝试在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})
使所有库文件(
*.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
中。我怎样才能预防它

如果要编写RPM
spec
文件,则
\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