【问题标题】:Netbeans environment variables for C++ makefileC++ 生成文件的 Netbeans 环境变量
【发布时间】:2013-01-28 13:24:32
【问题描述】:

我有一个简单的 makefile,它将 C++ 编译器称为 $(CXX),它在我的 ~/.profile 脚本中设置。 Netbeans 似乎有一个复杂的工具链管理器,但无论如何它似乎将$CXX 解析为c++

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

编辑:在导航器中右键单击生成文件允许我指定一个环境,尽管似乎只有一行输入的空间。指定 CXX=/usr/local/bin/g++ 可以解决问题,但这远非最佳。

【问题讨论】:

  • 您可以指定每个文件的编译选项,因此如果您右键单击一个文件,您可以将其指定为c 文件或c++ 文件...要选择编译器,您需要做一个toolkit
  • @Mikhail 这是一个自定义的 makefile,因此 Netbeans 不能对每个文件执行任何操作。
  • 也许你可以改变你的makefile?您还可以对 makefile 进行自定义调用,但我认为您只需选择正确的 toolset
  • @Mikhail 是的,这个问题是关于如何正确选择工具集或更改生成文件以反映工具集。
  • 我有一个类似的问题 - make 不会选择在我的 bash_profile 中设置的环境设置。在makefile之外它们被设置,可以用echo $VARIABLE显示,但在makefile里面$(info $VARIABLE)打印一个空行。有什么想法吗?

标签: c++ macos netbeans makefile


【解决方案1】:

我将只描述我在 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} 包含许多用于 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 文件对于所有 NetBeans 项目都是相同的。这里没有绝对路径,因此 make 将使用 PATH 变量来定位 GCC 工具集,但当然您可以使用绝对路径来选择您喜欢的工具集(或包含不同的 inc 文件 - 我更喜欢这种方式)。

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

希望对你有帮助 ~嗯

【讨论】:

  • 嗯,当你发布它时我错过了这个。我不再使用 NetBeans,但我的问题是“环境变量 MAKELIBHOME 在 NetBeans 之外设置”。 如何使外部环境变量对 NetBeans 可见?虽然,因为我在 Unix/OS X 上,它可能不会翻译过来。
  • @Potatoswatter - make 可以引用 Windows 和 Unix 中的环境变量,并且它发生在 NetBeans 之外。顺便说一句,我总是使用 NetBeans 项目类型“具有现有源的 C/C++ 项目”,所以我的 Makefile 完全在我的控制之下
  • 好吧,正如问题所述,我的.profile 确实设置了$CXX,但该变量对makefile 不可用。调用make 的程序负责创建环境,尽管默认情况下变量会传播。
  • 我再次查看了我的 makefile - 所以,我的旧 Windows XP 系统上的 makefile 确实引用了 MAKELIBHOME 环境变量,它之前已经设置(交互)。但是,我较新的 Ubuntu 系统上的 makefile 会在其中分配 MAKELIBHOME 变量。实际上,我的所有 makefile 中都有 ifeq (${OS},Windows_NT) 条件来使这种分支自动进行。所以 - 你是对的,Unix 上的 NetBeans 行为不同
【解决方案2】:

这是一个旧帖子。但是我最近发现了同样的问题,我根据@HEKTO 的回答找到了一个替代方案。

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

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

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

在“链接器”、“库”下,我输入了:${PETSC_LIB}(在上面的包含文件中定义)。

现在我可以在 NetBeans 中构建和运行我的项目。如果我的 PETSc 版本发生变化,我只需要更改传递给 make 的变量的定义,其他一切都会得到解决。

我希望这可能对某人有所帮助。它肯定对我有用。好的部分是我可以将我的代码提供给其他人,他们可以像往常一样使用“make”从命令行编译(没有 NetBeans)并定义上述环境变量。编译现在没有任何硬编码路径。

【讨论】:

    【解决方案3】:

    我在 linux 上遇到了一个非常相似的问题,Netbeans 没有从 bash 中获取环境变量。

    解决方案:从 bash 启动 netbeans。

    我不确定 Mac 上的等价物是什么,但想法很简单:从已设置正确环境变量的终端启动 Netbeans。

    【讨论】:

      猜你喜欢
      • 2011-12-21
      • 2022-01-07
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多