具有多个标头和命名空间的makefile

时间:2018-05-02 14:21:00

标签: c++ makefile

我正在使用包含各种源文件的公共c ++包 我编译了main.cpp,它引用了各种头文件,并使用了一个用户定义的命名空间,代码如下:

#include "main.h"
#include "nmssmsoftsusy.h"
#include "decays.h"

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

using namespace softsusy;

int main() {
  /// Sets up exception handling
  signal(SIGFPE, FPE_ExceptionHandler); 

其中main.cpp是

{{1}}

然后我遇到了诸如

之类的错误
  

对'FPE_ExceptionHandler(int)'

的未定义引用

即使我将.h更改为.cpp文件或包括softsusy.h,也会出现此类错误。

我可以问你编译命令中的错误来源,还是我下次可以尝试的makefile中的内容建议?

请注意我是使用makefile运行代码的新手,如果您给出或建议我如何组织makefile的简要说明,那将是很棒的。感谢。

2 个答案:

答案 0 :(得分:0)

首先,您必须编译软件包本身并获取您的程序稍后链接的库:

你需要做什么:

aclocal
./configure
make

之后你有很多像这样的库(静态的)

./.libs/libsoft.a
./.libs/libtsil.a
./.libs/libsupermodel.a

或者这些(动态的):

./.libs/libsoft.so.0
./.libs/libsupermodel.so.0
./.libs/libsoft.so.0.0.0
./.libs/libtsil.so.0
./.libs/libtsil.so.0.0.0
./.libs/libsupermodel.so.0.0.0
./.libs/libsupermodel.so
./.libs/libtsil.so
./.libs/libsoft.so

如果您现在想要编译自己的 main.cpp项目,那么您就可以了 根据需要链接库。我可以使用以下命令编译和链接main.cpp:

g++ main.cpp -I softsusy-4.1.1/src/ -L/home/krud/softsusy/softsusy-4.1.1/.libs -lsoft -ltsil -lsupermodel -o go

所有内容都写在软件包的INSTALL和README文件中,也包含在软件包的文档中。

如果您不知道如何链接库,则必须启动一个新问题,因为它与Makefile实际上没有任何关系,并且没有提及所提到的源代码包。

信息:我只需将版本4.1.1下载为tgz,就可以在我的电脑上完成一分钟。打开包装并提前3步我准备好了一切。只有aclocal需要添加,因为我的盒子有一个较新的autotools版本。

答案 1 :(得分:-1)

也许你应该尝试创建一个Makefile。 在那里,您可以将nmn ..编译为目标文件,将decays.cpp编译为目标文件。最后,您可以编译main.cpp。有关详细说明,请参阅http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/