Netbeans用于C++;生成文件 我有一个简单的Mag文件,它把C++编译器称为 $(CXX)< /C>,这是在我的 ~/.Prrist< /Cuff>脚本中设置的。Netbeans似乎有一个复杂的工具链管理器,但不管怎样,它似乎都像c++一样解析$CXX

Netbeans用于C++;生成文件 我有一个简单的Mag文件,它把C++编译器称为 $(CXX)< /C>,这是在我的 ~/.Prrist< /Cuff>脚本中设置的。Netbeans似乎有一个复杂的工具链管理器,但不管怎样,它似乎都像c++一样解析$CXX,c++,macos,netbeans,makefile,C++,Macos,Netbeans,Makefile,如何正确设置$CXX,或者我的makefile是否可以检测到Netbeans设置的另一个变量?(恶心) 编辑:右键单击导航器中的makefile可以指定一个环境,尽管似乎只有一行输入的空间。指定 CXX/USR/Studio/BI/G++< /C>解决问题,但这远不是最优的。 < P>我只描述我在NETBeCs中用C++工作时通常所做的。首先,我为每个项目创建一个简单的makefile,如下所示: MAIN = <my main target> CFLAGS = -g -std=c+

如何正确设置
$CXX
,或者我的makefile是否可以检测到Netbeans设置的另一个变量?(恶心)


编辑:右键单击导航器中的makefile可以指定一个环境,尽管似乎只有一行输入的空间。指定<代码> CXX/USR/Studio/BI/G++< /C>解决问题,但这远不是最优的。

< P>我只描述我在NETBeCs中用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>
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 $<
MAIN=
CFLAGS=-g-std=c++0x
包括${MAKELIBHOME}/MINGW32.inc
包括${MAKELIBHOME}/WINDOWS.inc
生成:${MAIN}
清洁:;rm-fr
环境变量MAKELIBHOME设置在NetBeans之外。目录${MAKELIBHOME}包含许多make的include文件,例如文件MINGW32.inc如下所示:

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>
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 $<
CC=g++
CFLAGS+=-W-DLITTLE_ENDIAN=1
LDLIBS+=-lws2_32
.后缀:.o.c.cpp
c.:${CC}${CFLAGS}${LDFLAGS}$<-o最新${LDLIBS}
.cpp:${CC}${CFLAGS}${LDFLAGS}$<-o最新${LDLIBS}
.c.o:${CC}${CFLAGS}-c$<
.cpp.o:${CC}${CFLAGS}-c$<
这些inc文件对于所有NetBeans项目都是相同的。这里没有绝对路径,因此make将使用PATH变量来定位GCC工具集,但是当然,您可以使用绝对路径来选择您喜欢的工具集(或者包括不同的inc文件-我更喜欢这种方式)

所有这些都可以在我的Windows机器上运行,但是Linux配置看起来非常相似——我只需要在我的所有主makefiles中包含另一组inc文件。此外,此设置允许我从命令行调用make

我希望有帮助,
~AY

这是一篇老文章。然而,我最近发现了同样的问题,并根据@HEKTO的答案找到了一个替代方案

我使用PETSc库来解决大型稀疏矩阵系统。他们的构建系统要求您在makefile中使用“include”,这取决于两个环境变量:PETSC_DIR和PETSC_ARCH,它们必须在您的环境中设置。。。。或者您可以将它们作为选项传递给make命令!!这就是我所做的

我使用NetBeans生成的makefile,最后添加了include:

include ${PETSC_DIR}/conf/variables
请注意,这如何取决于PETSC_DIR的定义。此外,这包括大量使用此和PETSC_拱门

因此,在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。

您可以指定每个文件的编译选项,因此,如果右键单击某个文件,您可以将其指定为
c
文件或
c++
文件……要选择编译器,您需要制作
toolkit
@Mikhail这是一个自定义的makefile,因此Netbeans无法对每个文件执行任何操作。也许您可以更改您的makefile?您也可以对makefile执行自定义调用,但我认为您只需选择正确的
工具集
@Mikhail是的,这个问题是关于如何正确选择工具集或将makefile更改为反映工具集。我有一个类似的问题-make不会拾取在我的bash_配置文件中设置的环境设置。在makefile外部设置了这些设置,可以用
echo$VARIABLE
显示,但在makefile
$(info$VARIABLE)内部设置
打印一个空行。有什么想法吗?嗯,你发布它时我错过了这个。我不再使用NetBeans,但我的问题是“环境变量
MAKELIBHOME
设置在NetBeans之外。”您是如何使外部环境变量对NetBeans可见的?尽管如此,由于我在Unix/OS X上,它可能无法转换。@Potatoswatter-make可以在Windows和Unix中引用环境变量,并且它发生在NetBeans之外。顺便说一句,我始终使用NetBeans项目类型“具有现有源代码的C/C++项目",因此我的
Makefile
完全在我的控制之下。正如问题所述,我的
.profile
设置了
$CXX
,但该变量对Makefile不可用。调用
make
的程序负责创建环境,尽管默认情况下变量会传播再次使用akefiles-因此,旧Windows XP系统上的makefiles确实引用了
MAKELIBHOME
环境变量,该变量已被设置(interactive