首頁  >  問答  >  主體

c++ - 库里面实现文件与头文件的问题

在github上看到一个项目,其中lib目录下的实现文件包含有另一个head文件夹下的头文件。lib文件夹和head文件夹不是同级的文件夹,head文件夹是另一个文件夹的子文件夹。但是lib文件夹里面的实现文件直接以#include "head/xx.hpp"的方式包含着头文件的。想知道为什么可以这样包含,lib下的实现文件如何能够访问到那个头文件呢?
先谢谢大家了

PHP中文网PHP中文网2764 天前540

全部回覆(2)我來回復

  • 怪我咯

    怪我咯2017-04-17 14:46:52

    這時候就該用gcc裡的-I參數,例如你的head/xxx.h位置在/path/to/libs/head/xxx.h,而飲用時用#include "head/xxx.h",用以下參數編譯即可:

    gcc lib/xxx.c -I/path/to/libs

    man gcc如下:

    -I dir
         Add the directory dir to the list of directories to be searched for
         header files.  Directories named by -I are searched before the
         standard system include directories.  If the directory dir is a
         standard system include directory, the option is ignored to ensure
         that the default search order for system directories and the
         special treatment of system headers are not defeated .  If dir
         begins with "=", then the "=" will be replaced by the sysroot
         prefix; see --sysroot and -isysroot.

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 14:46:52

    應該是有個設定選項設定了前面省略的路徑前綴。把項目clone下來,用sublime什麼的全域搜尋一下缺少的路徑字符,就知道是在哪裡配置的了。
    正常你寫程序,前面的#include<stdio.h>這種也不是在目前可見目錄下就放著的。 linux系統有一些預設的環境變數類似C_INCLUDE_PATH這種,會存放一些系統路徑,這些路徑就是你include的時候會去預設搜尋的頭檔路徑。你是可以繼續往後面加入你自己的路徑的。
    不知道你的專案是什麼平台的,像Android這種,編譯jni的時候,只要用LOCAL_C_INCLUDES指明頭檔路徑,程式碼裡就可以省去很長的頭檔路徑了。
    你也可以搜尋關鍵字linux系統 頭檔搜尋路徑等等學習相關知識。

    回覆
    0
  • 取消回覆