Visual C++ for Linux:将内容文件复制到构建目录?

4
我有一个在Raspbian上运行的Raspberry Pi项目,使用VS2017中的Visual C++进行构建。该项目由单个源文件(main.c)和一个图像(test.jpg)组成。在构建项目时,我希望图像文件也能够部署到Pi上,以便main.c中的代码可以在本地对其进行操作。然而,我无法弄清如何实现这一点。
图像文件的Content属性设置为True,包含在项目中。在项目属性下的复制源中,Sources to Copy设置为“@(SourcesToCopyRemotely)”,Copy Sources设置为“Yes”。然而,在构建时,只有main.c被复制到Pi上,编译器输出只是一个单独的.out文件。我希望在那里也能看到test.jpg,但遗憾的是没有。 这篇文章提到@(SourcesToCopyRemotely)默认为项目中的所有文件。然而,当我评估@(SourcesToCopyRemotely)的值时,它只评估为“main.c”。
如何确保我的项目中的内容文件与 .out 文件一起出现在构建目录中?最好不需要在后期构建步骤中手动输入每个文件名。
3个回答

3
这是VC++ for Linux中的一个漏洞。目前的解决方法是使用“附加源”进行复制。但是需要注意:它无法处理以~开头的远程路径。因此,如果远程生成根目录设置为默认值"~/projects",则无法使用$(RemoteRootDir)。我当前将远程构建根目录设置为"/home/pi/projects",并针对要复制到构建目录的每个文件,将“附加源”设置为"[filename]:=$(RemoteRootDir)/$(ProjectName)/bin/$(Platform)/$Configuration)/[filename]"。例如:
firstimage.png:=$(RemoteRootDir)/$(ProjectName)/bin/$(Platform)/$(Configuration)/firstimage.png;secondimage.png:=$(RemoteRootDir)/$(ProjectName)/bin/$(Platform)/$(Configuration)/secondimage.png

我不知道是否公平地称其为错误。在此文档中,似乎有意呼叫了这个功能:https://learn.microsoft.com/en-us/cpp/linux/configure-a-linux-project#copy-sources“默认情况下,@(SourcesToCopyRemotely) 默认包括项目中的所有源代码文件,但不包括任何资产/资源文件,例如图像。” - ProgrammerAl
1
这绝对是个 bug。我的头文件(*.h)没有复制到远程机器上,因为我将它们设置为自定义构建工具文件类型(并将所有远程复制选项都设置为是)。 但它仍然不会复制到远程机器上。 - Abbas Perçin

2
右键单击非源代码文件以打开其属性页面,并在“常规”选项卡中标记为“内容”,将导致该文件被复制到远程。不需要添加任何内容到“复制源”选项卡。项目属性的“复制源”页面必须显示默认值“@(SourcesToCopyRemotely)”。当您编辑此设置时,宏应该显示包含其他文件的扩展。

我发现有必要通过清除“Source to Copy”,然后将其恢复到默认值之后将其他文件标记为内容来刷新宏。

当附加文件不在Windows主机上的C++源文件所在的同一文件夹中和/或您想将它们放在远程的其他位置时,我遇到了问题。在VCLinux GitHub网站上有几个开放问题像这样的问题,因此报告您遇到的任何问题都是值得的。

[VCLinux 1.0.6 on VS Pro 2017 + Debian Jessie remote]


我无法在VS 2017 Community上使其工作。即使清除设置,构建,还原并再次构建也无济于事。 - Bas

0
项目属性中的“预生成事件”部分提供了“要复制的其他文件”。将我的文件地址(相对于解决方案)放在那里,在构建时输出如下:
Copying file 'C:\myfilepath\resource.png' to '/home/pi/projects/myproject/resource.png'

可以使用远程后置构建事件(mv source destination)将文件移动到最终目的地。虽然不是最优雅的方式,但这是我能够让它工作的第一件事。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接