2013-01-20 69 views
0

我有rc目錄我想在該目錄中遞歸運行xxd -i filename並將生成的文件添加到我的項目中。cmake運行xxd作爲自定義命令

我正在檢查lua上的一些answer。我以類似的方式做了它。

SET(RESOURCE_COMPILER "xxd") 
SET(COMPILED_RESOURCES "rc/base.css rc/common.js") 
FOREACH(F ${COMPILED_RESOURCES}) 
    ADD_CUSTOM_COMMAND(
     OUTPUT "${COMPILED_RESOURCES}/${F}" 
     COMMAND ${RESOURCE_COMPILER} -i "${COMPILED_RESOURCES}/${F}" 
     COMMENT "Compiling ${F} to binary") 
    LIST (APPEND COMPILED_RESOURCES "${COMPILED_RESOURCES}/${F}") 
ENDFOREACH() 

但我沒有看到任何生成的文件。

回答

1

有幾個原因可能導致您無法看到輸出文件。您的xxd命令在add_custom_command中格式不正確,但只有輸出文件在同一CMakeLists.txt中作爲另一個CMake目標(exe或lib)中的源文件時纔會執行該命令。

我想你的代碼段更改爲類似:

SET(RESOURCE_COMPILER xxd) 
FILE(GLOB_RECURSE COMPILED_RESOURCES "rc/*") 
FOREACH(INPUT_FILE ${COMPILED_RESOURCES}) 
    SET(OUTPUT_FILE ${INPUT_FILE}.hex) 
    ADD_CUSTOM_COMMAND(
     OUTPUT ${OUTPUT_FILE} 
     COMMAND ${RESOURCE_COMPILER} -i ${INPUT_FILE} ${OUTPUT_FILE} 
     COMMENT "Compiling ${INPUT_FILE} to binary") 
    LIST(APPEND COMPILED_RESOURCES ${OUTPUT_FILE}) 
ENDFOREACH() 

然後,如果你有另一個目標依賴於${OUTPUT_FILE}■當這個目標正在興建的指令被執行:

ADD_EXECUTABLE(MY_EXE main.cc ${COMPILED_RESOURCES}) 
+0

我在循環中放置了一個MESSAGE。我觀察到沒有空間。但即使我用'$ {RESOURCE_COMPILER}「-i」$ {INPUT_FILE}'修復了這個問題,也沒有生成任何文件。 –

+0

在循環內部放置一個'message'將不會給出由'add_custom_command'執行的命令的正確印象。參數全部單獨傳遞給xxd,並且適當添加空格。應該不需要''-i「''。如果你想檢查你的命令是否正確,你可以暫時添加'execute_process(COMMAND $ {RESOURCE_COMPILER} -i $ {CMAKE_SOURCE_DIR} /rc/base.css $ {CMAKE_SOURCE_DIR} /rc/base.css.hex)'到你的CMakeLists.txt。這將在每次調用cmake時運行,並讓你看看命令是否在做你想做的。 – Fraser

+0

那麼我應該用'execute_process'替換ADD_CUSTOM_COMMAND嗎? –