2013-04-24 76 views
1

美好的一天大家。CMake與關於生成的文件

我有以下情況:我有一個CMake的文件中,這是爲了編譯我的應用程序,其中包括:

  1. 一個或多個cpp文件
  2. 一些模板文件(ecpp),其然後生成cpp文件,這些文件被編譯到應用程序中(它們在下面的WEB_COMPONENTS中列出,因此對於每個組件都有關聯的.ecpp文件和將由其生成的.cpp)。

這裏是的CMakeLists.txt(簡體)

cmake_minimum_required (VERSION 2.6) 
set (PROJECT sinfonifry) 
set (ECPPC /usr/local/bin/ecppc) 
set (WEB_COMPONENTS 
    images 
    menu 
    css 
) 

set(${PROJECT}_SOURCES 
    "" 
    CACHE INTERNAL ${PROJECT}_SOURCES 
) 

foreach(comp ${WEB_COMPONENTS}) 
    list(APPEND ${PROJECT}_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/${comp}.cpp) 

    execute_process(COMMAND ${ECPPC} -o ${CMAKE_CURRENT_BINARY_DIR}/${comp}.cpp -v 
        ${CMAKE_CURRENT_SOURCE_DIR}/${comp}.ecpp 
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_QUIET 
       ) 
endforeach() 

list(APPEND ${PROJECT}_SOURCES main.cpp) 
add_executable(${PROJECT}_exe ${${PROJECT}_SOURCES}) 
target_link_libraries(${PROJECT}_exe cxxtools dl tntnet tntdb) 

現在,會發生什麼情況:在第一次(即:使build目錄,運行cmake的桂中,選擇Web組件,配置,生成,製作)CMake很好地執行${ECPPC}命令,即。它會在二進制目錄中生成所需的CPP文件,並將它們鏈接在一起。

過了一段時間,顯然在工作時,我修改了其中一個組件文件(例如images.ecpp),並在build目錄中再次運行make。但是現在,CMake並沒有拿起ecpp文件的變化。我必須去cmake-gui,刪除緩存,從零開始重新開始。這非常煩人而且緩慢。

於是,兩個問題:

  1. C和我告訴CMake的跟蹤images.ecpp的變化,並調用${ECPPC}編譯器就可以了,如果它改變了嗎?

  2. 我該如何才能make clean這樣它也會刪除生成的cpp文件。

謝謝你的時間,f。

回答

3

而不是execute_process()要使用add_custom_command()。在這裏看到:https://stackoverflow.com/a/2362222/4323

基本上你告訴C進行OUTPUT(生成的文件名),COMMANDDEPENDS(該.ecpp文件名)。這使得它瞭解如何將源代碼轉換爲必要的C++生成的文件。然後,將生成的文件添加到某個目標,例如, add_executable()add_custom_command()依賴關係(如果不需要編譯,則更可能需要)。

+1

非常好。只需共享命令:'add_custom_command(OUTPUT $ {CMAKE_CURRENT_BINARY_DIR}/$ {comp} .cpp COMMAND $ {ECPPC} -o $ {CMAKE_CURRENT_BINARY_DIR}/$ {comp} .cpp -v -n $ {comp} $ { CMAKE_CURRENT_SOURCE_DIR}/$ {comp} .ecpp DEPENDS $ {CMAKE_CURRENT_SOURCE_DIR}/$ {comp} .ecpp)' – fritzone 2013-04-25 06:13:45