我正在编译过程中,我遇到了自定义头文件路径的问题。
这是存储库的结构。
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"
为什么两者不同?
答案 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