欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

一、Cmake傳參:適用于簡(jiǎn)單場(chǎng)景

在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)

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

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

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

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

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語言簡(jiǎn)單實(shí)現(xiàn)計(jì)算字符個(gè)數(shù)的方法

    C語言簡(jiǎn)單實(shí)現(xiàn)計(jì)算字符個(gè)數(shù)的方法

    這篇文章主要介紹了C語言簡(jiǎn)單實(shí)現(xiàn)計(jì)算字符個(gè)數(shù)的方法,涉及C語言針對(duì)字符串的簡(jiǎn)單遍歷與判定技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Qt數(shù)據(jù)庫應(yīng)用之實(shí)現(xiàn)通用數(shù)據(jù)庫采集

    Qt數(shù)據(jù)庫應(yīng)用之實(shí)現(xiàn)通用數(shù)據(jù)庫采集

    這篇文章主要為大家介紹了Qt中是如何實(shí)現(xiàn)通用數(shù)據(jù)庫采集的,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Qt有一定幫助,感興趣的小伙伴可以了解一下
    2022-03-03
  • C++使用map容器實(shí)現(xiàn)電子詞典

    C++使用map容器實(shí)現(xiàn)電子詞典

    這篇文章主要為大家詳細(xì)介紹了C++如何使用map容器實(shí)現(xiàn)電子詞典功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考一下
    2022-11-11
  • C++實(shí)現(xiàn)簡(jiǎn)單的掃雷游戲(控制臺(tái)版)

    C++實(shí)現(xiàn)簡(jiǎn)單的掃雷游戲(控制臺(tái)版)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡(jiǎn)單的掃雷游戲,控制臺(tái)版的掃雷游戲希望大家喜歡,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 用C語言實(shí)現(xiàn)單鏈表的各種操作(一)

    用C語言實(shí)現(xiàn)單鏈表的各種操作(一)

    本篇文章是對(duì)用C語言實(shí)現(xiàn)單鏈表的各種操作進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言基礎(chǔ)使用IDE快速開發(fā)的方法

    C語言基礎(chǔ)使用IDE快速開發(fā)的方法

    這篇文章主要介紹了C語言基礎(chǔ)使用IDE快速開發(fā)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • C語言實(shí)現(xiàn)密碼本小項(xiàng)目

    C語言實(shí)現(xiàn)密碼本小項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)密碼本小項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C語言棧之順序棧

    C語言棧之順序棧

    這篇文章主要為大家詳細(xì)介紹了C語言的順序棧,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++ Boost Heap使用實(shí)例詳解

    C++ Boost Heap使用實(shí)例詳解

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11
  • C++ Boost Spirit入門教程

    C++ Boost Spirit入門教程

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11

最新評(píng)論