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

Current Working Directory for Header Files C++

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

这是存储库的结构。

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"

为什么两者不同?

每个常见的编译器都允许您定义一个包含文件夹。在这里你可以说 headerFiles 是你的包含文件夹,所以你的 hello_world 将是

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

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

#include "headerFiles/SeqLibCommon.h"

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

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

R 包编译始终与 src/ 相关,后者成为构建的工作目录。

如果你想添加那个目录显式你可以添加

PKG_CXXFLAGS = -I.

如果你想添加目录 inst/include/ 你必须添加

PKG_CXXFLAGS = -I../inst/include

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

至于您的 SeqLib 来源:您可以四处移动,或根据需要调整您的 src/Makevars