2
我有一些C文本文本文件。我希望在編譯時(理想情況下使用cmake
)獲取此文件中的文本,並使用它生成一個簡單的C++頭文件 - 一個包含幾個include,名稱空間聲明和一個std :: string的文件值是我的文本文件的內容,新行和所有內容。在編譯時將文本文件轉換爲字符串
這樣做的最好方法是什麼?
我有一些C文本文本文件。我希望在編譯時(理想情況下使用cmake
)獲取此文件中的文本,並使用它生成一個簡單的C++頭文件 - 一個包含幾個include,名稱空間聲明和一個std :: string的文件值是我的文本文件的內容,新行和所有內容。在編譯時將文本文件轉換爲字符串
這樣做的最好方法是什麼?
好的,所以我採用了不同於此處建議的解決方案。這就是我所做的。
在我的源代碼中,我定義了一個處理程序類,我將使用我需要的字符串字面值。這裏有兩件事很重要:
.hpp.in
。實現文件是正常.cpp
#define MY_STRING @[email protected]
現在,的CMakeLists.txt負責這兩個文件裏面,我這樣做:
//
意見,結果保存在臨時變量\n
字符與字符串"newline"
,將結果保存到一個新的臨時變量MY_STRING
),並從該最新臨時變量@ONLY
下$ {CMAKE_SOURCE_DIR}它分配到適當的位置下$ {CMAKE_BINARY_DIR}(和它重命名爲一個.hpp
)。這可以確保cmake將複製頭文件,但也會更新#define MY_STRING @[email protected]
,其值爲MY_STRING
我稍早設置。最後,我的處理程序的執行文件中我定義下面的宏:
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
,這樣我可以打電話TOSTRING(MY_STRING)
和輸出分配給std::string my_string
。一旦完成,我需要做的就是用"\n"
替換"newline"
佔位符字符串 - 我就完成了! my_string
現在具有與原始文本文件中的值相同的值(不含註釋)。
我希望我有更多的時間來玩這個遊戲,而其他的任務讓我分散注意力,但事情的方式,現在要做。
謝謝大家的幫助!
一個簡單的shell腳本應該能夠做到這一點。讀取文件,然後將其寫入'std :: string varname =「...」;'的初始化中。要記住的主要事情是避免任何雙引號和反斜槓。 – Barmar
@Barmar:可能更容易使用原始字符串(至少在大多數情況下)。 –
我很確定這是重複的。最簡單的方法是在原始字符串文字定義中使用一些嵌套的'#include'語句。 –