我试图缩短我的问题(旧问题仍然可以在下面找到)
我当前的目录结构如下所示
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)
如果我将此目录添加为包含路径,我可以将 .. \ utility \ include 的.h文件与#include <file.h>
包含在proj1中IDE(在proj1中)。是否有 .. \ utility \ src 文件的等效解决方案?我在Windows 7上使用LPCXpresso IDE。我想在任何IDE上都有相同的解决方案,所以我只想知道这个无论路径(如果没有找到.c文件将在哪里搜索。\ src 目录)通常被调用以在我的项目设置中找到它。
#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>
多重包含将导致多个函数deklaration,从而导致编译器错误。只有解决方案可能是
#ifndef helper_c_
//content of helper.c file
#endif
,这是不切实际的,并且总是需要包含.h和.c文件。但我只需要存储一次,没有副本,如果我需要更改某些内容,它将在所有项目中更改,因为它们都指向该文件夹
我现在也谈论库文件,你有一个.lib和一个.dll文件,其中.lib文件需要由库路径指向,而.dll文件需要在同一个文件夹中。之后是.exe文件。但这不是我想要的。
我的问题:是否有可能将.h和.c文件(在我目前的情况下有10个文件对)存储在一个单独的文件夹中,并通过包含路径指向它们或者?我试着用谷歌搜索,但我想我不太清楚我会找什么。
感谢您的帮助
编辑:我忘了提及:我使用的是Windows 7,而我目前的IDE是LPCXpresso-IDE
答案 0 :(得分:2)
好的,假设你有这个目录结构:
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
目录中。我看到你的问题至少有三个解决方案:
如果您真的想要#include
我不建议做的源文件,只需使用文件的相对路径即可。
#include "..\..\utility\src\file1.c"
现在除了包含源文件的问题之外,这往往非常脆弱,因为如果更改目录结构(或更改目录名称),一切都会中断。您需要返回源代码并修复每行代码。
正如iharob建议的那样,使用make文件来处理这个问题。在这种情况下,您将拥有一个看起来像这样的编译行(假设您正在使用Microsoft的工具更改);
cl /I..\..\utility\include ..\..\utility\src\file1.c /o util_file1.o
这会导致编译结果被删除到当前工作目录中,链接器将能够找到所有目标文件并将它们组合成一个可执行文件。我们仍然在这里处理相对路径,但所有更改都在一个文件中,并且通过使用make变量,更改将在一行或两行。
希望这有帮助, Ť
答案 1 :(得分:0)
当然是的,根据您使用的编译器,会有一个开关告诉编译器在哪里搜索标题,gcc
和其他一些AFAIK,它是{{1例如,假设您的标头位于-I
目录中,则应该像这样调用编译器
myproject/headers
在不同目录中使用gcc -I myproject/header ${OTHER_OPTIONS} ${SOURCE_OR_OBJECT_FILES} -o ${OUTPUT_FILE}
文件构建项目的常用方法是使用.c
和一个可以解析Makefile
的程序并调用必要的命令来构建项目
答案 2 :(得分:0)
警告:#include
源(.c)文件通常不是一个好主意。源文件用于编译,而不是包含 - 包括它们可能会导致奇怪的错误(最重要的是,明显重新定义函数)。
以下是我要做的事情(对于每个需要帮助代码的项目):
helper.c
)与项目一起编译。#include <helper.h>
中,以便您使用实用程序声明。helper.h
的文件夹。这通常可以在项目选项/设置中找到。答案 3 :(得分:-1)
在浏览了所有设置和选项后,我找到了以下令人满意的解决方案:创建到源文件夹的链接
此答案适用于LPCXpresso IDE