2012-10-29 10 views
7

私は、Qtプロジェクトを構成するセットに属していないファイルと、それ以外のファイルを持つディレクトリを持っています。つまり、ファイルA.cxx、ADriver.cxx、およびA.uiはすべてQtオプションでコンパイルする必要があるセットに属します。私は非qtファイルB.cxxを持っています。 C.cxx、CDriver、およびC.uiは別のQtセットです。これらの数十があるので、私は手動で各add_executableを書くのではなく、globを使用したいと思います。私はその後、(上記のループで使用されていない)「残る」ことをすべてCXXファイルが非Qtのであり、自分でコンパイルする必要がセットからファイルを削除する

for(all ui files) 
    create an executable from the ui and its matching .cxx and *Driver.cxx" 
end 

ような何かをやって考えていました。私の質問は、 "セット"からファイルを "減算"する方法です。つまり、上記の方法を使用するには、すべてのcxxファイルのセットを用意し、.uiファイルループで使用するものを削除する必要があります。これは可能ですか?このようなことをする良い方法はありますか?

答えて

8

まず、グロブを持つすべてのファイルを収集します。

file(GLOB ALL_SRCS *) 

そして、UIのファイルを選択し、それらのためのQtのターゲットを作成、同時にALL_SRCSリストからそれらをsubstracting:

file(GLOB UIS *.ui) 

foreach(ui ${UIS}) 
get_filename_component(f ${ui} NAME_WE) 

# Do Qt stuff 
qt4_wrap_ui(${f}uis ${ui}) 
qt4_wrap_cpp(${f}srcs ${f}.cpp ${f}Driver.cpp) 
add_executable(${f} ${f}uis ${f}srcs) 

list(REMOVE_ITEM ALL_SRCS ${ui} ${f}.cpp ${f}Driver.cpp) 
endforeach() 

後これはALL_SRCSにqt以外のすべての情報源を持っています。

+0

@arrowdodgetああ、REMOVE_ITEMはまさに私が探していたものだと思います。私はそれを試してみると、私は答えを受け入れるよ - ありがとう! –

関連する問題