我有一个简单的makefile,它将C++编译器调用为$(CXX)
,这是在我的~/.profile
脚本中设置的。Netbeans似乎有一个复杂的工具链管理器,但它似乎无论如何都将$CXX
解析为c++
。
如何正确设置$CXX
,或者我的makefile是否可以检测到Netbeans设置的另一个变量?
编辑:右键单击导航器中的makefile可以指定一个环境,尽管似乎只有一行输入的空间。指定CXX=/usr/local/bin/g++
可以解决问题,但这远不是最佳的。
我将描述我在NetBeans中使用C++时通常会做什么。起初,我为每个项目创建一个简单的makefile,如下所示:
MAIN = <my main target>
CFLAGS = -g -std=c++0x
include ${MAKELIBHOME}/MINGW32.inc
include ${MAKELIBHOME}/WINDOWS.inc
build: ${MAIN}
clean:; rm -fr <files to remove>
环境变量MAKELIBHOME是在NetBeans之外设置的。目录${MAKELIBHOME}包含许多include文件用于make,例如文件MINGW32.inc如下所示:
CC = g++
CFLAGS += -W -DLITTLE_ENDIAN=1
LDLIBS += -lws2_32
.SUFFIXES: .o .c .cpp
.c: ;${CC} ${CFLAGS} ${LDFLAGS} $< -o latest ${LDLIBS}
.cpp: ;${CC} ${CFLAGS} ${LDFLAGS} $< -o latest ${LDLIBS}
.c.o: ;${CC} ${CFLAGS} -c $<
.cpp.o: ;${CC} ${CFLAGS} -c $<
这些inc-files对于所有NetBeans项目都是相同的。这里没有绝对路径,所以make将使用PATH变量来定位GCC工具集,但当然你可以使用绝对路径来选择你喜欢的工具集(或者包括不同的inc-file-我更喜欢这种方式)。
所有这些都适用于我的Windows机器,但Linux配置看起来非常相似——我只需要在所有主要的makefile中包含另一组inc-files。此外,此设置允许我从命令行调用make。
我希望它能有所帮助,~AY
这是一篇旧帖子。然而,我最近发现了同样的问题,并根据@HEKTO的回答找到了一个替代方案。
我使用PETSc,一个用于求解大型稀疏矩阵系统的库。他们的构建系统要求您在生成文件中使用一个"include",它取决于两个环境变量:PETSC_DIR和PETSC_ARCH,这两个变量必须在您的环境中设置。。。。或者您可以将它们作为选项传递给您的make命令!!这就是我所做的。
我取了NetBeans生成的makefile,最后我添加了我的include:
include ${PETSC_DIR}/conf/variables
请注意,这取决于PETSC_DIR的定义。此外,这包括在各地大量使用此和PETSC_ARCH。
因此,在NetBeans中,我现在将其配置为传递以下变量:工具->选项:在"项目选项"选项卡中,我将"生成选项"的文本框填充为:PETSC_DIR=/path/to/PETSC PETSC_ARCH=some ARCH
此外,现在您可以开始使用这些环境变量(以及在项目选项中的${PETSC_DIR}/conf/variables中定义的其他变量)。例如,对于我所做的包含文件(右键单击项目,然后单击"属性"):在"C编译器"的"包含目录"下,我放入:${PETSC_DIR}/Include
在"Linker"下,我放了"Libraries":${PETSC_LIB}(在上面的include文件中定义)。
现在我可以在NetBeans中构建和运行我的项目了。如果我的PETSc版本发生了变化,我只需要改变传递给make的变量的定义,其他的都会得到解决。
我希望这能帮助到一些人。它确实对我有用。好的地方是,我可以把我的代码交给其他人,他们可以像往常一样使用"make"(没有NetBeans)从命令行编译,并定义上面的环境变量。编译现在没有任何硬编码路径。
我在linux上遇到了一个非常类似的问题,Netbeans没有从bash中获取环境变量。
解决方案:从bash启动netbeans。
我不确定Mac上的等价物是什么,但想法很简单:从已经设置了正确环境变量的终端启动Netbeans。