Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过C/C++#定义makefile_Makefile_Eclipse Cdt - Fatal编程技术网

通过C/C++#定义makefile

通过C/C++#定义makefile,makefile,eclipse-cdt,Makefile,Eclipse Cdt,我使用EclipseIDE开发C/C++。Eclipse还生成了一个我不想编辑的makefile,因为它将被覆盖 我想用这个makefile在哈德逊内部进行夜间构建 如何将在IDE的项目文件中生成的#定义传递给makefile?(为什么Eclipse还没有将它们包含在生成的makefile中?) 事实上,我曾经弄明白了这一点,然后意外地重写了它:-(但至少我知道它是可以做到的…对于GCC使用-D define OP在下面评论说,他希望将define传递给make,并将其传递给GCC Make不允

我使用EclipseIDE开发C/C++。Eclipse还生成了一个我不想编辑的makefile,因为它将被覆盖

我想用这个makefile在哈德逊内部进行夜间构建

如何将在IDE的项目文件中生成的#定义传递给makefile?(为什么Eclipse还没有将它们包含在生成的makefile中?)

事实上,我曾经弄明白了这一点,然后意外地重写了它:-(但至少我知道它是可以做到的…

对于GCC使用-D define

OP在下面评论说,他希望将define传递给make,并将其传递给GCC


Make不允许这样做。通常您只需添加另一个Make规则来添加定义。例如“Make release”与“Make debug”。作为Make文件的创建者,您可以创建这两个规则,并在Make文件中正确定义。现在,如果Eclipse没有将定义放入Make文件中,我会说Eclipse已损坏。

您可以编写编写一个包含头文件的小程序,并编写一个makefile片段(需要GNU make)


这是一个相当丑陋的解决方案,需要大量的手工操作。更优雅的做法是解析项目文件并编写makefile片段。

如果您是从命令行运行make,请使用

make CPPFLAGS=-DFOO

这将在所有编译中添加-DFOO。另请参阅制作手册中的CFLAGS、CXXFLAGS、LDFLAGS。

如果您使用自动工具,另一个选项是有两个目录“bin/debug”和“bin/release”

# Simple bootstrap script.

# Remove previously generated filed and call autoreconf.
# At the end configure 2 separate builds.
echo "Setting up Debug configuration: bin/debug"
../../configure CXXFLAGS="-g3 -O0 -DDEBUG=1"
echo "Setting up Release configuration: bin/release"
cd bin/release/
../../configure CXXFLAGS="-O2"
安装Eclipse。打开项目的属性(项目->属性->C/C++构建->构建器设置),并将构建位置->构建目录设置为

${workspace_loc:/helloworld/bin/debug}
将“helloworld”替换为相对于工作区的项目目录(或者您可以提供一个绝对路径${/abs/path/debug})。对发布配置执行相同的操作,将“/debug”替换为路径末尾的“Release”


这种方法看起来是浪费磁盘空间,但却是一个有效的替代方案,完全实现了单独的构建。

我们中的一个已经回答了错误的问题。我认为他有一个C++头,有一些<代码>定义了,并且希望使用它们来做出决策。如果他有一些变量,想要得到它们,你的建议是正确的。在C++编译期间,预处理器可能考虑到了,抱歉,我想传递“X”定义,然后调用GCC。这样,像<代码> --dMAXVAL=42 < /代码> HMM,我知道我以前管理过它,但是忘记了……我同意Eclipse出来把定义放入Mag文件中。.我注意到makfile行
-include../makefile.init'和
-include../makefile.defs`但这些文件不存在(!).Eclipse CDT的家伙们似乎已经失手了,因为从Jaunty升级到Karmic后,再也没有软件包了。关于如何安装CDT,有太多或网页提供了不同的解决方案。可能是我选择的“几乎有效”解决方案。也就是说,从CDT内部工作,而不是从外部使用
make
?是的,但问题是我知道我以前没有使用黑客。唉,我已经记不起怎么做了。请看下面的评论。也许Jaunty/Kosmic CDT的惨败意味着我不能重复我以前做过的任何事情。我可能不得不按照你的建议和建议去做在makefile中添加广告,对其进行处理并将其写入另一个makefile。顺便说一句,我想要使用的定义与Eclipse中使用的定义并不完全相同(例如,我可以将-Doutput=file替换为-Doutput=console,等等)这似乎覆盖了我在Makefile中设置的CPPFLAGS。是否有方法将此标志添加到CPPFLAGS?@matec-是的,环境变量中的定义具有优先级。您可以在Makefile中使用
CPPFLAGS+=-DBAR
添加更多标志