gpt4 book ai didi

CMake 关于生成的文件

转载 作者:行者123 更新时间:2023-12-02 05:06:45 26 4
gpt4 key购买 nike

大家好。

我有以下情况:我有一个 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)

现在,发生了什么:第一次(即:创建构建目录,运行 cmake-gui,选择 Web 组件,配置,生成,制作)CMake 很好地执行了 ${ECPPC}命令,即。它在二进制目录中生成所需的 CPP 文件,并将它们链接在一起。

一段时间后,显然在我工作时,我修改了其中一个组件文件(例如 images.ecpp )并运行 make再次在构建目录中。但是现在,CMake 不接受 ecpp 的变化。文件。我必须去 cmake-gui,删除缓存,从零重新启动一切。这非常繁琐且缓慢。

那么,两个问题:

  1. 我可以告诉 CMake 跟踪 images.ecpp 的变化吗?并调用 ${ECPPC}如果它改变了编译器就可以了吗?

  2. 我怎样才能make clean这样它也可以删除生成的 cpp文件。

谢谢你的时间,f。

最佳答案

您要使用 add_custom_command() 而不是 execute_process()。看这里:https://stackoverflow.com/a/2362222/4323

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

关于CMake 关于生成的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16193343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com