当前头文件C ++的工作目录

时间:2016-10-31 22:46:08

标签: c++ rcpp

我正在编译过程中,我遇到了自定义头文件路径的问题。

这是存储库的结构。

temp
  seqLib
  headerFiles
    SeqLibCommon.h
  src
    hello_world.cpp

hello_world.cpp 文件中有以下内容:

#include <iostream>
#include <Rcpp.h>
#include "../headerFiles/SeqLibCommon.h"

这可以编译并运行,但是在C ++包中,SeqLibCommon.h的路径将被引用为:

#include "headerFiles/SeqLibCommon.h"

为什么两者不同?

2 个答案:

答案 0 :(得分:4)

R包编译始终相对于src/,它成为构建的工作目录。

如果要显式添加目录,可以添加

PKG_CXXFLAGS = -I.

如果您想添加目录inst/include/,则必须添加

PKG_CXXFLAGS = -I../inst/include

因为你需要相对src/。你可以将两者结合起来。

对于您的SeqLib来源:您可以移动内容,或根据需要调整src/Makevars

答案 1 :(得分:1)

每个通用编译器都允许您定义包含文件夹。在这里,您可以说headerFiles是您的包含文件夹,因此您的hello_world将是

#include <iostream>
#include <Rcpp.h>
#include "SeqLibCommon.h"

或者您可以将include文件夹定义为temp,这样就可以

#include "headerFiles/SeqLibCommon.h"

在g ++或clang上,你可以这样编译:

g++ src/hello_world.cpp -o hello_world -I headerFiles