Cmake:如何在文件更新时运行bash命令?
我正在尝试编写一个CMakeLists.txt来加速编译.
可执行文件取决于脚本生成的.cpp文件:我使用cppcms Web应用程序库,它具有模板系统,其中.tmpl必须在编译期间转换为.cpp文件,如下所示: cppcms_tmpl_cc page.tmpl -o page.cpp 有相关问题涉及在cmake中使用bash命令: 我现在要知道的是,每当page.tmpl本身发生变化时,如何告诉cmake运行上面的命令并重新生成page.cpp,然后呢? 目标显然是改进编译时间并使用最新模板获得最新二进制文件. (主持人可以添加cppcms标签吗?) [编辑:我实际上是在尝试将以下Makefile转换为cmake: LIBS=-lcppcms -lconfig++ -lboost_filesystem-mt all: clean gitbrowser gitbrowser: main.cpp view.cpp content.hpp gitbrowser.cpp $(CXX) -Wall main.cpp gitbrowser.cpp view.cpp -o run ${LIBS} view.cpp: page.tmpl content.hpp cppcms_tmpl_cc page.tmpl -o view.cpp [编辑2:我在官方cppcms维基中添加了关于解决方案的说明: 解决方法now = get_now_time() time = get_last_upd_time() if (now > time) set (LAST_UPD_TIME time CACHE INTERNAL "Defines last update time of the file" FORCE) # run bash command here endif (now > time) get_now_time和get_last_upd_time是虚构的函数,返回时间戳(我猜你可以使用bash命令来获取这些时间戳).然后,您可以比较它们并将最后修改时间戳存储到缓存中. 但是,这个解决方案对我来说看起来很难看,因为我知道如果你正确定义它们之间的目标和依赖关系,CMake本身将负责重建仅修改过的文件,不是吗?你能告诉我目标定义吗? 编辑 您可以使用以下CMakeLists.txt(我不确定,这是基于我的项目): # add main target,the executable file ADD_EXECUTABLE(gitbrowser main.cpp view.cpp content.hpp gitbrowser.cpp) # linking it with necessary libraries TARGET_LINK_LIBRARIES(gitbrowser "cppcms config++ boost_filesystem-mt") # add page.cpp target ADD_CUSTOM_COMMAND( OUTPUT page.cpp COMMAND "cppcms_tmpl_cc page.tmpl -o view.cpp" DEPENDS page.tmpl content.hpp ) # and finally add dependency of the main target ADD_DEPENDENCIES(gitbrowser page.cpp) 祝好运 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |