大家好。
我有以下情况:我有一个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)现在,发生了什么: CMake第一次(即:创建构建目录、运行CMake、选择web组件、配置、生成、制作)很好地执行了${ECPPC}命令,即。它在二进制目录中生成所需的CPP文件,并将它们链接到一起。
一段时间后,显然在我工作的时候,我修改了一个组件文件(如images.ecpp),并在构建目录中再次运行make。但是现在,CMake没有获取ecpp文件的更改。我必须去cmake,删除缓存,从零重新启动一切。这是非常令人厌烦和缓慢。
因此,有两个问题:
images.ecpp的变化,如果改变了就调用${ECPPC}编译器?make clean,以便它也删除生成的cpp文件。谢谢你抽出时间,f。
发布于 2013-04-24 14:00:34
而不是execute_process(),您希望使用add_custom_command()。见此处:https://stackoverflow.com/a/2362222/4323
基本上,您可以告诉CMake OUTPUT (生成的文件名)、COMMAND和DEPENDS ( .ecpp文件名)。这使它理解如何将源转换为必要的C++生成文件。然后,将生成的文件添加到某个目标中,例如add_executable(),或者添加到add_custom_command()依赖项中(如果不需要编译它,则更有可能需要它)。
https://stackoverflow.com/questions/16193343
复制相似问题