Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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
Xcode 如何获得复制文件生成阶段以遵循DSTROOT生成设置?_Xcode_Xcode10.2 - Fatal编程技术网

Xcode 如何获得复制文件生成阶段以遵循DSTROOT生成设置?

Xcode 如何获得复制文件生成阶段以遵循DSTROOT生成设置?,xcode,xcode10.2,Xcode,Xcode10.2,我有一个建立图书馆的项目。Xcode设置DSTROOT被设置为默认的/tmp/$(项目名称)。dst和Xcode将库放在那里。我有一个复制阶段来添加手册页。它的目的地设置为“绝对路径”,路径设置为$(DSTROOT)/usr/local/share/man/man3。当我运行它时,它试图将手册页复制到“/usr/local/share/man/man3”,因此我的权限被拒绝。换句话说,它的作用就像没有设置DSTROOT一样。我尝试显式设置DSTROOT值,而不是使用默认值。同样的事情 如何使此复

我有一个建立图书馆的项目。Xcode设置DSTROOT被设置为默认的/tmp/$(项目名称)。dst和Xcode将库放在那里。我有一个复制阶段来添加手册页。它的目的地设置为“绝对路径”,路径设置为$(DSTROOT)/usr/local/share/man/man3。当我运行它时,它试图将手册页复制到“/usr/local/share/man/man3”,因此我的权限被拒绝。换句话说,它的作用就像没有设置DSTROOT一样。我尝试显式设置DSTROOT值,而不是使用默认值。同样的事情


如何使此复制文件生成阶段使用DSTROOT值?

不要使用绝对路径。一种方法是选择包装器作为目标,并使用“../../usr/local/share/man/man3”作为相对路径。这假设包装路径是/Applications/$(PRODUCT_NAME).app,默认值

另一种方法是根本不使用复制文件构建阶段。使用运行脚本构建阶段。将shell设置为
/bin/bash
,并使用如下脚本:

set -x
mandir="$DSTROOT/usr/local/share/man/man3"
mkdir -p "$mandir"
i=0
while [$i -lt ${SCRIPT_INPUT_FILE_COUNT}] ; do
    name="SCRIPT_INPUT_FILE_$i"
    cp "${!name}" "$mandir/"
    let i=i+1
done
复制文件后,您可能希望
chmod
和/或
chown
查看这些文件


确保将要复制的文件作为输入添加到构建阶段,并将输出路径(可以基于
${DSTROOT}
)作为输出。

是否确定包装器默认为/Applications?我以为它指向了
$(build\u PRODUCTS\u DIR)/$(Target.app
。我试试你的第二个建议。对不起,我犯了一个错误,你是对的;它默认为
/Applications/$(产品名称).app
。这就是为什么我在相对路径中放置了两个父目录引用。我已经测试了这两种方法,它们都有效。我使用了包装器和路径.././$(DSTROOT)/usr/local/share/man/man3。谢谢你的提示。不客气,但那没有任何意义
$(DSTROOT)
是一个绝对路径,因此将其放在相对路径中没有任何好处。很可能,它只是对空字符串求值,没有任何效果。把它插在相对路径的中间,它只是延伸了相对路径。包装器+
。/..
将其带到根
/
。从那里,它去任何地方。Xcode默认情况下将DSTROOT设置为
/tmp/$(PROJECT_NAME).dst
,所以它就是这样做的。包含DSTROOT的要点是,您可以使用
sudoxcodebuild进行真正的安装。。。DSTROOT=/
。我正在使用我显示的路径,它对安装到
/tmp/$(项目名称).dst
/
都有效。