【问题标题】:How to define relative paths in Visual Studio Project?如何在 Visual Studio Project 中定义相对路径?
【发布时间】:2011-10-17 06:00:39
【问题描述】:

我有一个库和一个使用库的控制台应用程序。该库有一个包含源文件和头文件的文件夹。

我的项目位于子目录/内部目录中,但我想要包含的库目录位于父目录/上层目录中。

我的项目目录:

H:\Gmail_04\gsasl-1.0\lib\libgsaslMain

包含的文件在这里:

H:\Gmail_04\gsasl-1.0\src

如何使用相对于项目目录的路径来包含父/上级目录中的文件夹?

【问题讨论】:

    标签: c visual-studio visual-studio-2008 visual-c++


    【解决方案1】:

    您需要了解一些提示。

    考虑你的应用在 c:\MyRepository\MyApp 下运行

    路径上的一个点表示您的应用运行所在的文件夹。因此,如果您想访问 MyApp 文件夹下的某个文件夹或文件(想象一下 c:\MyRepository\MyApp\Resources\someText.txt),您可以像 var bla = File.Exists(./Resources/someText.txt) 一样进行操作

    你可以用双点 (..) 上一层,想想 c:\MyRepository\SomeFolder\sometext.txt 下的文件夹 对于 MyApp,它会像 var bla = File.Exists(../SomeFolder/someText.txt)

    还有可能升到 2,3,4.. 像这样的等级

    ../../SomeFolder(2 级)

    ../../../SomeFolder(3 级以上)

    不以点开头的路径表示驱动器根目录。 var bla = File.Exists(/SomeFolder/someText.txt) 将在我们的场景中查找 c:\SomeFolder\someText.txt。

    【讨论】:

      【解决方案2】:

      默认情况下,您定义的所有路径都是相对的。问题是:相对于什么?有几种选择:

      1. 指定文件或路径之前没有任何内容。例如:“mylib.lib”。在这种情况下,将在 输出目录 中搜索文件。
      2. 如果添加“..\”,则路径将根据 .sln 文件所在的实际路径计算。

      请注意,在 $(SolutionDir) 等宏之后不需要添加反斜杠“\”。只需使用 $(SolutionDir)mylibdir\mylib.lib。 如果您无法让它工作,请从记事本外部打开项目文件并检查它。

      【讨论】:

        【解决方案3】:

        除了使用相对路径,您还可以使用 VS 的预定义宏来实现这一点。

        $(ProjectDir)指向你的.vcproj文件的目录,$(SolutionDir).sln文件的目录。

        打开项目时,您会看到可用宏的列表,请转到
        属性 → 配置属性 → C/C++ → 常规
        并点击三个点:

        在即将出现的对话框中,点击 Macros 以查看 Studio 预定义的宏(请咨询 MSDN 了解其含义):

        您可以通过键入$(MACRO_NAME) 来使用宏(注意$括号)。

        【讨论】:

        • 请注意,这些是圆括号()不是花括号{}。十五分钟以来,我一直错误地尝试将宏与后者一起使用。
        • @hauzer:感谢您的提示。我将您的评论纳入我的回答中。
        • 是否有等效的 C# 项目?
        • @Chiramisu 我猜那里的变量是一样的?见stackoverflow.com/a/830307
        • MS 是否有任何编码指南推荐包含 Visual Studio 的路径而不是包含相对路径。
        【解决方案4】:

        我以前用过这样的语法:

        $(ProjectDir)..\headers
        

        ..\headers
        

        正如其他人指出的那样,起始目录是您的项目文件所在的目录(vcprojvcxproj),而不是您的主代码所在的位置。

        【讨论】:

        • 在 VS2013 Update 3 中似乎又可以正常工作了,不确定 U2 和 U1。
        • ($ProjectDir) 不应该是 $(ProjectDir) 吗?
        • 不错的答案。在 Microsoft Visual Studio Community 2017 上测试。
        • 点击“应用”,然后在“链接器->命令行”中验证生成的绝对路径是否正确。
        • 不适用于映射的网络驱动器,那么您似乎必须对路径进行硬编码!
        【解决方案5】:

        如果我猜对了,你需要..\..\src

        【讨论】:

        • 我试过这个...但它说找不到此文件夹中的包含文件。但是当我给出完整的路径时它工作正常。
        • 可能项目目录不是你想的那样?也许它更深了一步?
        • 如果是这种情况,我该怎么办?如果您对项目目录正确,路径应该是什么。?
        • ..\..\..\src.. 会返回一个目录。
        • 这个放在哪里?我将哪些标志传递给链接器的link 命令?
        猜你喜欢
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-21
        • 1970-01-01
        相关资源
        最近更新 更多