c++ - 如何将 .c 和 .h 文件存储在包含路径中,与当前项目的源代码分开

标签 c++ c ide include-path

我试图缩短我的问题(旧问题仍然可以在下面找到)

我当前的目录结构是这样的

C:\users\documents\projects 
    |
    +----- utility
    |         |
    |         +----- include (files not shown)
    |         +----- src
    |                 |
    |                 +----file1.c (and other files not shown)
    |
    +----- proj1
             |
             +----- include (files not shown)
             +----- src
                     |
                     +----- proj_file1.c (and other files not shown)

我可以使用 #include <file.h> 包含来自 ..\utility\include 的 .h 文件到 proj1,如果我将此目录作为 include path 添加到我的 IDE(在 proj1 中)。 ..\utility\src 文件是否有等效的解决方案?我在 Windows 7 上使用 LPCXpresso IDE。我想在任何 IDE 上都有相同的解决方案,所以我只想知道这个whatever path(如果在.\src 目录)通常在我的项目设置中被调用以找到它。

  • 我尽量避免使用库(.lib、.dll)
  • 我不想在每个项目(proj1、proj2、...、projn)中复制 .c 文件
  • 我希望能够简单地编辑 .c 和 .h 文件,如果重新编译 proj1 等,更改将被应用,就像所有其他项目一样
  • 生成自己的 makefile 可能是一个解决方案(但不应该有一个在 IDE 中添加源文件路径的选项吗?)
  • #include <..\utility\src>这是一个不受欢迎的解决方案,因为对目录的更改将强制在每个文件中添加此行,而在选项中更改路径只需点击几下。

在此先感谢并感谢您到目前为止的回答


我的问题的旧版本:

动机:想象一下,您在某些 IDE 中用 C/C++ 编写程序,并且像往常一样拥有 .c 和 .h 源代码文件。此外,您还有一个 helper.c 和 helper.h 文件,您是否定义了一些有用的、与项目无关的函数(可用于多个项目)。您想要包含这些文件,但又不想让它们存储与项目相关的源代码。

据我所知 .h 文件可以存储在一个单独的文件夹中,该文件夹由includepath 指向。这个路径可以在每个 IDE 中设置。进一步改变了

#include "helper.h"

声明

#include <helper.h>

如果我将 .c 文件放在同一个文件夹中而不单独包含它们,编译器将找不到它们。如果我也将它们包括在内

#include <helper.c>

多重包含将导致多重函数声明并因此导致编译器错误。唯一的解决方案可能是一个

#ifndef helper_c_
//content of helper.c file
#endif

,这有点不切实际,总是需要包含 .h 和 .c 文件。但我只需要将它们存储一次,没有拷贝,如果我需要更改某些内容,它将在所有项目中更改,因为它们都指向该文件夹

我现在还谈到了库文件,其中有一个 .lib 和一个 .dll 文件,其中 .lib 文件需要由库路径指向,而 .dll 文件需要位于与之后的.exe文件。但这不是我想要的。

我的问题:是否有可能将 .h 和 .c 文件(在我当前的情况下有 10 个文件对)存储在单独的文件夹中并通过包含路径指向它们或者?我试着用谷歌搜索,但我想我不太确定我要找什么。

感谢帮助

编辑:我忘了说:我使用的是 Windows 7,我当前的 IDE 是 LPCXpresso-IDE

最佳答案

好的,假设你有这样的目录结构:

C:\users\documents\projects 
        |
        +----- utility
        |         |
        |         +----- include (files not shown)
        |         +----- src
        |                 |
        |                 +----file1.c (and other files not shown)
        |
        +----- proj1
                 |
                 +----- include (files not shown)
                 +----- src
                         |
                         +----- proj_file1.c (and other files not shown)

同时假设当前编译目录在 proj1/src 目录中。对于您的问题,我至少看到了三种解决方案:

  1. 如果您真的想要#include 源文件(我不建议这样做),只需使用文件的相对路径即

    #include "..\..\utility\src\file1.c"
    

现在除了包含源文件的问题外,这往往非常脆弱,因为如果您更改目录结构(或更改目录名称),一切都会中断。您需要返回源代码并修复每一行代码。

  1. 按照 iharob 的建议,使用 make 文件来处理这个问题。在这种情况下,您将拥有如下所示的编译行(假设您使用的是 Microsoft 的工具更改);

    cl /I..\..\utility\include ..\..\utility\src\file1.c  /o util_file1.o
    

这会导致编译结果被放入当前工作目录,链接器将能够找到所有目标文件并将它们组合成一个可执行文件。我们仍然在这里处理相对路径,但所有更改都将在单个文件中,并且通过使用 make 变量,更改将在一两行中进行。

  1. 如果实用程序目录中的函数将在多个项目中使用,我个人最喜欢的解决方案是制作一个实用程序项目,该项目生成一个动态库(Windows 下的 dll)并将后续项目与该库链接。您仍然需要处理定位包含文件的位置(可能是所有项目文件夹所在的顶层目录?),但对我来说,库似乎更干净。它还具有额外的优势,如果您想修改实用程序项目中的代码,只需重新编译库,项目的其余部分将“看到”修改而无需重新编译它们(假设您不修改图书馆)。

希望对您有所帮助,

关于c++ - 如何将 .c 和 .h 文件存储在包含路径中,与当前项目的源代码分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28659169/

相关文章:

java - Netbeans 中的自动换行

c - ffmpeg 程序员使用的 lib Swscale 是做什么用的?

c++ - dlopen 或 dlclose 未调用信号处理程序

c - 用移位提取符号位

c++ - 如何让鼠标的位置连续离开对话框? (MFC)

c++ - eclipse CDT : doesn't show name a macro appears in

ruby-on-rails - Eclipse用户: Do you use Aptana too?

c++ - std::reference_wrapper 中的 Visual C++ 10.0 错误?

c++ - 如何初始化双**?

c++ - ifstream 不读取更新的文件 C++