automakeを使用する場合は、次のようなものを使用できます。私はこれを長い間使ってきましたが、あなたが求めているものを達成するためにはうまくいきます。 Makefile.am
で
:
BUILT_SOURCES = git_info.h
EXTRA_DIST = echo_git_info.sh win_config.h
.
.
(main build recipes)
.
.
git_info.h: $(HEADERS) $(SOURCES)
echo_git_info.sh > git_info.h
echo_git_info.sh
において:
#! /bin/sh
function echo_git_info {
if [[ $(which git 2> /dev/null) ]]
then
local STATUS
STATUS=$(git status 2>/dev/null)
if [[ -z $STATUS ]]
then
return
fi
echo "`git symbolic-ref HEAD 2> /dev/null | cut -b 12-`-`git log --pretty=format:\"%h\" -1`, "
return
fi
}
echo "// Auto-generated source/build information."
echo "#define GIT_SOURCE_DESC \"`echo_git_info``date`\""
が上記可変GIT_SOURCE_DESC
になり、ファイルgit_info.h
で定義されています。このように、あなたのmain.cpp
あなたはその後、缶の中:
#include <iostream>
#include "ginkgo_info.h"
int main(int argc, char* argv[]) {
std::cout << "Source is: " << $GIT_SOURCE_DESC << std::endl;
}
'G ++ -DVERSION_NUMBER = "\ 'Gitは説明\'"'は動作しませんか? –
@Karl Bielefeldtいいえ、そうではありません。 -Dは基本的にマクロを定義します。マクロは数値で評価することができますが、文字列が含まれている場合、gccはその文字列を明らかに動作しないコードとして解釈しようとします。 – anio
私は、引用符がシェルによって削除されていることを確認します。 'g ++ -DVERSION_NUMBER =" \ "\' git describe \ '\" " –