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

Current Working Directory for Header Files C++

本文关键字:当前工作 文件 c++      更新时间:2023-10-16

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

这是存储库的结构。

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"

为什么两者不同?

一个R包编译总是相对于src/,它成为构建的工作目录。

如果你想明确添加目录你可以添加

PKG_CXXFLAGS = -I.

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

PKG_CXXFLAGS = -I../inst/include

,因为您需要相对于 src/

对于您的SeqLib源:您可以移动周围的东西,或根据需要调整您的src/Makevars

每个通用的编译器都允许你定义一个包含文件夹。这里你可以说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