最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++獲取項(xiàng)目路徑的兩種方式詳解

 更新時(shí)間:2021年10月12日 10:20:52   作者:Type真是太帥了  
這篇文章主要介紹了C++獲取項(xiàng)目路徑的兩種方式的相關(guān)資料,需要的朋友可以參考下,希望能夠給你帶來幫助

在某些特定的條件運(yùn)行時(shí)不能使用局部地址,例如ci流程等,這就要求讀取文件時(shí)必需使用全局地址,但是在項(xiàng)目路徑不定的情況下很難知道某個文件的全局地址,目前存在兩種獲取項(xiàng)目路徑的方式,其中一種更適用于ci流程。

一、Cmake傳參:適用于簡單場景

在Cmake中,很容易知道項(xiàng)目的地址,例如

${PROJECT_SOURCE_DIR}

可以在cmakelists中,將該值賦值給變量,例如MAIN_PATH:

set(MAIN_PATH ${PROJECT_SOURCE_DIR})

然后新建xxx.h.in文件,僅需一行即可利用宏捕獲MAIN_PATH:

#define PROJECT_PATH "@MAIN_PATH@"

在cmakelists中將xxx.h.in編譯成xxx.h:

configure_file(src/param_deliver.h.in ../src/param_deliver.h)

編譯完成后即可生成對應(yīng)的xxx.h:

#define PROJECT_PATH "/home/type/mcamera/mcamera"

然后調(diào)用該宏即可獲得項(xiàng)目地址。

二、從環(huán)境變量讀?。哼m合腳本場景

C++中自帶函數(shù)getenv,可以讀取指定的環(huán)境變量,返回char *。詳見std::getenv - cppreference.com。

因此,可以在bash中將當(dāng)前項(xiàng)目地址設(shè)置為指定的環(huán)境變量,例如

export resource_path=${PWD}

注意,是${PWD}而不是${pwd}。

然后在c++代碼直接讀取即可:

char *path = getenv("resource_path");

不存在則為空。

組合實(shí)例代碼:

首先讀取環(huán)境變量,如果不存在則從Cmake里讀取:

std::string getResourcePath() {
    char *path = getenv("RESOURCE_DIR");
    if (path != nullptr) {
        LOG("find path in ENV:%s", path);
        return path;
    }
    // not find in ENV
    std::string project_path = PROJECT_PATH;
    std::string resource_path = project_path + "/test/resource/";
    LOG("find path in CMake:%s", resource_path.c_str());
    return resource_path;
}

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C語言構(gòu)建連連看游戲(矩陣方式)

    C語言構(gòu)建連連看游戲(矩陣方式)

    這篇文章主要為大家詳細(xì)介紹了C語言構(gòu)建連連看游戲,采用矩陣方式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 一篇文章帶你了解C++中的異常

    一篇文章帶你了解C++中的異常

    這篇文章主要為大家詳細(xì)介紹了C++中的異常,使用數(shù)據(jù)庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • QT5?Thread線程的具體實(shí)現(xiàn)

    QT5?Thread線程的具體實(shí)現(xiàn)

    本文主要介紹了QT5?Thread線程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C++實(shí)現(xiàn)簡單BP神經(jīng)網(wǎng)絡(luò)

    C++實(shí)現(xiàn)簡單BP神經(jīng)網(wǎng)絡(luò)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡單BP神經(jīng)網(wǎng)絡(luò),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • ubuntu中打開終端的三種解決方法

    ubuntu中打開終端的三種解決方法

    本篇文章是對ubuntu中打開終端的三種方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言文件操作入門指南

    C語言文件操作入門指南

    我們在想既然是通訊錄就應(yīng)該把信息記錄下來,只有我們自己選擇刪除數(shù)據(jù)的時(shí)候,數(shù)據(jù)才不復(fù)存在,這就涉及到了數(shù)據(jù)持久化的問題,我們一般數(shù)據(jù)持久化的方法有,把數(shù)據(jù)存放在磁盤文件、存放到數(shù)據(jù)庫等方式,使用文件我們可以將數(shù)據(jù)直接存放在電腦的硬盤上,做到了數(shù)據(jù)的持久化
    2024-08-08
  • C語言三子棋一步步實(shí)現(xiàn)詳程

    C語言三子棋一步步實(shí)現(xiàn)詳程

    三子棋是一種民間傳統(tǒng)游戲,又叫九宮棋、圈圈叉叉、一條龍、井字棋等。將正方形對角線連起來,相對兩邊依次擺上三個雙方棋子,只要將自己的三個棋子走成一條線,對方就算輸了,想用c語言做出這個游戲,事實(shí)上也是比較簡單的,下面通過c語言進(jìn)行對五子棋的分析
    2022-02-02
  • 詳解C語言中的常量指針和指針常量

    詳解C語言中的常量指針和指針常量

    這篇文章主要介紹了詳解C語言中的常量指針和指針常量,包括其之間的區(qū)別是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • VisualStudio2022 cmake配置opencv開發(fā)環(huán)境

    VisualStudio2022 cmake配置opencv開發(fā)環(huán)境

    本文主要介紹了VisualStudio2022 cmake配置opencv開發(fā)環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • c++中new和delete操作符用法

    c++中new和delete操作符用法

    c++中new和delete運(yùn)算符是用于動態(tài)分配和撤銷內(nèi)存的運(yùn)算符,下面是示例,大家參考使用吧
    2014-04-04

最新評論

饶阳县| 宾川县| 靖江市| 班玛县| 基隆市| 尖扎县| 旬阳县| 壤塘县| 兴仁县| 辽阳县| 龙海市| 北川| 石门县| 宝兴县| 杭州市| 雅安市| 和顺县| 青龙| 酒泉市| 龙川县| 临桂县| 万载县| 凤阳县| 海淀区| 工布江达县| 庆云县| 长兴县| 沁阳市| 梁山县| 贺兰县| 乌兰浩特市| 平阳县| 武川县| 余庆县| 新津县| 台北市| 杭锦后旗| 高州市| 富蕴县| 辽宁省| 长兴县|