2014-11-24 32 views
1

我正在尋找一種方法讓CMake在每次檢測到特定目標/可執行文件的依賴關係發生更改時重新運行shell命令。我嘗試添加一個自定義命令,它對目標具有依賴性,但這似乎並沒有成功。什麼,我想可能工作重新運行文件更改時的execute_process

例子:

ADD_CUSTOM_COMMAND(
      OUTPUT temp 
      DEPENDS my_Target 
      COMMAND ./some_command.sh) 

當目標已被檢測的依賴性改變,可能能夠運行一個命令一個命令的任何建議。或者,如果我們可以檢查特定文件的更改,則更好。

+0

'some_command.sh'需要在'my_target'構建之前實際運行。所以是的,temp會成爲'my_target'的一部分。 – MZimmerman6 2014-11-25 13:57:03

回答

-3

add_custom_command()使用簡單檢查OUTPUT文件存在來確定是否應該運行該命令。如果它不存在,那麼CMake做make my_Target,然後才能運行你的命令。同時,如果存在OUTPUT,CMake根本不運行任何東西。

達到你需要add_custom_target()你想要什麼(可能與ALL關鍵字與make運行)和實施檢查您的some_command.sh內變化。

+0

'對OUTPUT文件存在使用簡單檢查來確定命令是否應該運行'它還檢查OUTPUT比DEPENDS中的任何文件/目標更老。 '如果它不存在,那麼CMake做my_Target,然後運行你的命令'nope,這個命令只有在OUTPUT是某個目標的一部分時纔會被調用,如果沒有目標使用OUTPUT這個命令永遠不會觸發。 '如果OUTPUT存在,CMake根本不運行任何東西'參見上面的註釋,如果OUTPUT不夠新鮮,它可以運行。 – 2014-11-25 12:12:35

+0

'實施檢查你的some_command.sh'裏面的變化如果cmake可以爲你做的話,檢查腳本有什麼意義? – 2014-11-25 12:13:15

+0

不知道有關DEPENDS,感謝您的信息。 – arrowd 2014-11-25 13:01:17

0

從你的描述,這聽起來像你可能希望這樣的:

cmake_minimum_required(VERSION 2.8) 
project(cmaketest) 

add_custom_command(OUTPUT some_file.cpp 
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bar.cpp 
    COMMAND ${CMAKE_COMMAND} -E copy 
     ${CMAKE_CURRENT_SOURCE_DIR}/bar.cpp 
     ${CMAKE_CURRENT_BINARY_DIR}/some_file.cpp 
    VERBATIM 
) 

add_executable(mn main.cpp some_file.cpp) 

將輸出文件中,依賴於它的目標的源列表。

+0

該命令應該執行的操作是運行自動生成代碼文件的腳本。這些代碼文件將被添加到源列表中並用於目標。那麼,COMMAND的參數可以是任何cmake或bash命令還是必須遵循某種格式? – MZimmerman6 2014-11-25 13:54:23

+0

它可以是任何命令。 – steveire 2014-11-25 14:08:15