2011-05-04 90 views
0

我有两个可执行文件必须在同一个项目中共享的代码(一个构建命令会构建它们)。此代码包含#ifdef预处理程序语句,这些语句会更改其在每个项目中的工作方式(将命令行宏定义用作开关)。将两个目录合并为一个虚拟目录以进行编译/别名包括目录

来源是摘要从某种意义上说,有些标题丢失。例如,共享文件Application.cpp可能包含名为gui/MainWindow.h的文件,该文件在共享目录中不存在,但存在于可执行源目录中。或者它可能包含名为gui/Local.h的文件,该文件确实存在于共享目录中。

本质上我需要gui路径是两个位置的组合。

关于unix,我之前通过设置一系列文件链接来完成此操作,但是此项目现在将窗口作为目标(Visual Studio)。另外,我知道如何使用共享目录结构和设置编译器包含开关来实现这一点,但我希望有一种更简单的方法。

任何想法?


我使用CMake作为编译器生成代码,使用GCC和Visual Studio作为编译器。

我已经看过为预处理器定义一个目录,但#include指令很遗憾不能组合几个标记来创建文件名。一个名字的作用,这可能是一个选项,让cmake为所有共享文件名吐出宏。

回答

0

我真的认为最简单的解决方案是使用包含路径 - 为不同项目使用不同的路径。查看property sheets以在项目之间共享设置并大大简化管理。

如果您在unix中使用文件链接,则可以在Windows中使用symbolic links

+0

我知道这种方法,但在这种情况下,它感觉不太正确。这将是对项目当前目录结构的巨大改变/分歧。 – 2011-05-04 07:06:44

+0

我希望你可以保持目录结构相同,并使用include路径包含正确的目录,就像你使用#defines一样。包含路径将允许您为每个项目设置一个“gui”目录,并为所有项目提供一个共享的“gui”目录。 – Bids 2011-05-04 07:11:30

+0

目前我们的设置是一个包含子文件夹的通用包含目录,include/lib为了执行共享包含,我必须有像include/exec_a/include/gui这样的目录,但是'exec_a'是一种一个无意义的include,并且这个结构也必须在'src'目录中重复。我知道这会起作用,它对我们当前的目录结构并不那么友好。 – 2011-05-04 07:19:51