首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于生成的文件的CMake

关于生成的文件的CMake
EN

Stack Overflow用户
提问于 2013-04-24 13:30:18
回答 1查看 1.7K关注 0票数 2

大家好。

我有以下情况:我有一个CMake文件,它应该编译我的应用程序,它包括:

  1. 一个或多个cpp文件
  2. 一些模板文件(ecpp)被生成为cpp文件,这些文件被编译到应用程序中(它们在WEB_COMPONENTS中列出,因此对于每个组件,都有关联的.ecpp文件和将从中生成的.cpp )。

这是CMakeLists.txt (简化的)

代码语言:javascript
复制
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,删除缓存,从零重新启动一切。这是非常令人厌烦和缓慢。

因此,有两个问题:

  1. 我告诉CMake跟踪images.ecpp的变化,如果改变了就调用${ECPPC}编译器?
  2. 我如何才能make clean,以便它也删除生成的cpp文件。

谢谢你抽出时间,f。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-24 14:00:34

而不是execute_process(),您希望使用add_custom_command()。见此处:https://stackoverflow.com/a/2362222/4323

基本上,您可以告诉CMake OUTPUT (生成的文件名)、COMMANDDEPENDS ( .ecpp文件名)。这使它理解如何将源转换为必要的C++生成文件。然后,将生成的文件添加到某个目标中,例如add_executable(),或者添加到add_custom_command()依赖项中(如果不需要编译它,则更有可能需要它)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16193343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档