2012-10-29 126 views
7

我有一個目錄,其中包含屬於構成Qt項目的集合的文件,以及其他文件不包含的文件。也就是說,文件A.cxx,ADriver.cxx和A.ui都屬於需要使用Qt選項編譯的集合。然後我有一個非qt的文件B.cxx。然後C.cxx,CDriver和C.ui是另一個Qt集合。有幾十個,所以我想使用globs而不是手動編寫每個add_executable。我正想着做一些像從集合中刪除文件

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

然後,所有CXX文件「保持」(在上面的循環未使用)都是非Qt的,並且需要自己編譯。我的問題是如何從「集合」中「減去」文件。也就是說,要使用上面描述的方法,我必須有一組所有的cxx文件,並刪除在.ui文件循環中使用的文件。這可能嗎?有沒有更好的方法來做這樣的事情?

回答

8

首先,收集所有的文件有水珠:

file(GLOB ALL_SRCS *) 

然後選擇UI文件,併爲他們創造Qt的目標,同時從ALL_SRCS列表從其減去他們:

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正是我所期待的。一旦我嘗試了一下,我會接受答案 - 謝謝! –