我正在從現有的GNU makefile重寫cmake構建腳本。這是我試圖寫的第一個cmake腳本。什麼cmake命令與GNU make的vpath相匹配?
GNU make提供vpaths命令,但我找不到一個corrsponding命令。
我已經實現了一個宏來解決它,但我發現它很難涵蓋所有的異常情況。
您有任何解決方案嗎?
在許多來源和目錄下需要一些時間。
宏(VPATH resultSource NumOfSource NumOfDir SOURCELIST DirList) 數學(EXPR startDirIndex 「3 + $ {NumOfSource}」) 數學(EXPR endIndex的 「2 + $ {NumOfSource} + $ {NumOfDir}」)
message(STATUS "startDirIndex: ${startDirIndex}")
message(STATUS "endIndex: ${endIndex}")
set(__SRC_LIST__)
set(__SRC_DIR__)
set(pos 0)
foreach(item ${ARGV})
if(${pos} EQUAL ${startDirIndex}
OR ${pos} GREATER ${startDirIndex})
list(APPEND __SRC_DIR__ ${item})
#message(STATUS "DIR:${item}")
elseif(${pos} GREATER 2)
list(APPEND __SRC_LIST__ ${item})
#message(STATUS "SRC:${item}")
endif(${pos} EQUAL ${startDirIndex}
OR ${pos} GREATER ${startDirIndex})
math(EXPR pos "${pos}+1")
endforeach(item ${ARGV})
#message(STATUS "__SRC_LIST__: ${__SRC_LIST__}")
#message(STATUS "__SRC_DIR__: ${__SRC_DIR__}")
#set(SOURCE_EXTENTION cpp c C CPP)
set(SOURCE_EXTENTION cpp)
#list(APPEND SOURCE_EXTENTION ${CMAKE_CXX_SOURCE_FILE_EXTENSIONS} ${CMAKE_C_SOURCE_FILE_EXTENSIONS})
#message(STATUS "SOURCE_EXTENTION: ${SOURCE_EXTENTION}")
set(temp_list "")
foreach(dir ${__SRC_DIR__})
foreach(src ${__SRC_LIST__})
set(cand_src)
foreach(postfix ${SOURCE_EXTENTION})
set(cand_src "${dir}/${src}.${postfix}")
file(GLOB result ${cand_src})
if(NOT ${result} STREQUAL "")
list(APPEND temp_list ${result})
endif(NOT ${result} STREQUAL "")
endforeach(postfix ${SOURCE_EXTENTION})
endforeach(src ${__SRC_LIST__})
endforeach(dir ${__SRC_DIR__})
set(${resultSource} ${temp_list})
#message(STATUS "temp_list: ${temp_list}")
endmacro(vpath resultSource NumOfSource NumOfDir sourceList DirList)
嗯,你爲什麼需要它?你能顯示這個宏的代碼嗎? – arrowd 2012-02-26 11:54:44