美好的一天大家。CMake与关于生成的文件
我有以下情况:我有一个CMake的文件中,这是为了编译我的应用程序,其中包括:
- 一个或多个
cpp
文件 - 一些模板文件(
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,删除缓存,从零开始重新开始。这非常烦人而且缓慢。
于是,两个问题:
C和我告诉CMake的跟踪
images.ecpp
的变化,并调用${ECPPC}
编译器就可以了,如果它改变了吗?我该如何才能
make clean
这样它也会删除生成的cpp
文件。
谢谢你的时间,f。
非常好。只需共享命令:'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