编译器不遵循 Visual Studio C++ 中的符号链接;

发布于 2024-09-14 03:50:07 字数 628 浏览 6 评论 0原文

我正在使用 Visual Studio 2008 C++ 项目(Visa 32 位)。

我的源代码中有以下 #include 指令。

#include <example/header.h>

在我的包含路径中,我指定了“example”的父目录,即

C:/.../include

标头的完整路径看起来像

C:/.../include/example/header.h

但是,“example”是一个符号链接(A '通过文件资源管理器“新快捷方式”创建的“.lnk”)。我收到以下错误

c:...\foo.cpp(37) : 致命错误 C1083: 无法打开包含文件: 'example/header.h': 没有这样的文件或目录

如果我用实际目录替换符号链接,该项目将正确编译。出于实际原因,我需要它作为符号链接。有没有办法让 Visual Studio 预处理器跟踪链接?

I am using Visual Studio 2008 C++ project (Visa 32 bit).

I have the following #include directive in my source code.

#include <example/header.h>

In my include path I specify the parent directory of 'example', i.e.

C:/.../include

where the full path to the header looks like

C:/.../include/example/header.h

However, 'example' is a symbolic link (A '.lnk' created via file explorer 'new shortcut'). I get the following error

c:...\foo.cpp(37) : fatal error C1083: Cannot open include file: 'example/header.h': No such file or directory

If I replace the symbolic link with the actual directory, the project will compile correctly. For practical reasons I need it to be a symbolic link. Is there anyway to make the Visual Studio pre-processor follow the link?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦里南柯 2024-09-21 03:50:07

该链接是符号链接 (.lnk)

您确定不创建快捷方式吗?快捷方式的工作级别比符号链接更高,并且对应用程序没有任何意义。

相反,符号链接(如果正确创建)应该可以与任何读取/写入文件/文件夹的应用程序正常工作。

有关更多详细信息,您可能希望考虑阅读此关于符号链接的文章,解释了如何使用 mklink 创建符号链接。

以下是“Bernard Kerckenaere”对该文章的评论中的有用片段:

  • 快捷方式:在操作系统级别(对于希望
    读/写链接,它只是一个
    无意义的文件)

  • 软链接(或符号链接):类似于快捷方式,但在文件系统级别
    (应用程序读/写
    链接,实际上会读/写
    文件链接到)
    ...
    这将适用于跨分区或驱动器

  • 硬链接:仅针对文件,发生的情况是存在多个
    指向相同的文件条目
    物理数据,当您删除一个
    条目,另一个仍然可以工作,
    在所有条目之前数据不会消失
    被删除(如果您使用软链接
    删除原来的目录,
    链接不再有效!)
    ->显然,您只能创建指向同一分区上的文件的硬链接

您想要创建的是一个符号链接,您可以使用mlink通过/D参数来创建它。

The link is a symbolic link (.lnk)

Are you sure you're not creating a shortcut? Shortcuts work on a higher level than symbolic links and mean nothing to applications.

Conversely, symbolic links (if properly created) should work fine with any application that reads/writes to files/folders.

For more details, you may wish to consider reading this article about symbolic links, which explains how you can create a symbolic link using mklink.

Here's a helpful snippet from a comment on that article by "Bernard Kerckenaere":

  • shortcut: on the operating system level (to applications who wish to
    read/write the link, it’s just a
    meaningless file)

  • soft link (or symbolic link): like a shortcut, but on the filesystem level
    (applications reading/writing the
    link, will actually read/write the
    file linked to)
    ...
    this will work across partitions, or drives

  • hard link: only for files, what happens is that there are multiple
    file entries that point to the same
    physical data, when you delete one
    entry, the other will still work, the
    data won’t be gone until all entries
    are deleted (if with a soft link you
    delete the original directory, the
    link won’t work anymore!)
    -> you can obviously only create hard links to a file on the same partition

What you want to create is a symbolic link which you can do with the /D parameter using mlink.

你是暖光i 2024-09-21 03:50:07

.lnk不是符号链接,它是资源管理器的快捷方式文件。
要创建硬链接,请使用

fsutil hardlink create link_name file_name

在 Vista 上,有 mklink 实用程序来创建符号链接。

.lnk is not symbolic link, it is shortcut file for Explorer.
To create hard link, use

fsutil hardlink create link_name file_name

On Vista, there is mklink utility to create symbolic links.

雨的味道风的声音 2024-09-21 03:50:07

旧版本的 Visual Studio 在符号链接方面有点挑剔。使用 \H 参数对文件进行硬链接几乎不起作用,但使用 \D 对整个目录进行符号链接通常没问题。不过,之后您可能需要从项目中删除并重新添加该文件夹。

Older versions of Visual Studio are a bit finicky when it comes to symlinks. Hard links on files using the \H parameter hardly ever work, but symlinking entire directories using \D is usually fine. Afterwards, you might need to remove and re-add the folder from and to your project, though.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文