-DCOMPILE_WITHOUT_FOO
のようなC/C++プリプロセッサフラグの依存関係をサポートするためのベストプラクティスはありますか?私はしたくない何#definesへの依存関係のベストプラクティス?
> setenv COMPILE_WITHOUT_FOO
> make
g++ FileWithIfdefFoo.cpp
値があれば、すべてを再コンパイルする必要があるために:
> setenv COMPILE_WITHOUT_FOO
> make <Make system reads environment, sets -DCOMPILE_WITHOUT_FOO>
<Compiles nothing, since no source file has changed>
は、私は何をしたいのは、再コンパイルを取得#ifdef
文に依存しているすべてのファイルを持っている。ここに私の問題ですCOMPILE_WITHOUT_FOOの変更はありません。
私は基本的にヘッダファイルFooDefines.h
を書き込んだ後、何かが違うかどうかを調べるために、基本的なPythonスクリプト(下記参照)を使用しています。そうであれば、FooDefines.h
を置き換え、従来のソースファイルの依存関係を引き継ぎます。定義はではなく、-D
というコマンドラインでが渡されます。欠点は、FooDefines.h
を#ifdef
を使用する任意のソースファイルに含める必要があり、また、#ifdef
ごとに新しい動的生成ヘッダーファイルがあることです。これを行うためのツールやプリプロセッサの使用を避ける方法があれば、私はすべて耳にします。
import os, sys
def makeDefineFile(filename, text):
tmpDefineFile = "/tmp/%s%s"%(os.getenv("USER"),filename) #Use os.tempnam?
existingDefineFile = filename
output = open(tmpDefineFile,'w')
output.write(text)
output.close()
status = os.system("diff -q %s %s"%(tmpDefineFile, existingDefineFile))
def checkStatus(status):
failed = False
if os.WIFEXITED(status):
#Check return code
returnCode = os.WEXITSTATUS(status)
failed = returnCode != 0
else:
#Caught a signal, coredump, etc.
failed = True
return failed,status
#If we failed for any reason (file didn't exist, different, etc.)
if checkStatus(status)[0]:
#Copy our tmp into the new file
status = os.system("cp %s %s"%(tmpDefineFile, existingDefineFile))
failed,status = checkStatus(status)
print failed, status
if failed:
print "ERROR: Could not update define in makeDefine.py"
sys.exit(status)
私が使用しているIDEのバグレポートが追加されました。運があればすぐにそれを直すかもしれない – Jay