加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Cmake:如何在文件更新时运行bash命令?

发布时间:2020-12-15 21:40:14 所属栏目:安全 来源:网络整理
导读:我正在尝试编写一个CMakeLists.txt来加速编译. 可执行文件取决于脚本生成的.cpp文件:我使用cppcms Web应用程序库,它具有模板系统,其中.tmpl必须在编译期间转换为.cpp文件,如下所示: cppcms_tmpl_cc page.tmpl -o page.cpp 有相关问题涉及在cmake中使用bash
我正在尝试编写一个CMakeLists.txt来加速编译.

可执行文件取决于脚本生成的.cpp文件:我使用cppcms Web应用程序库,它具有模板系统,其中.tmpl必须在编译期间转换为.cpp文件,如下所示:

cppcms_tmpl_cc page.tmpl -o page.cpp

有相关问题涉及在cmake中使用bash命令:
How to run a command at compile time within Makefile generated by CMake?
CMake : how to use bash command in CMakeLists.txt
这些问题涵盖了我的大部分需求.

我现在要知道的是,每当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维基中添加了关于解决方案的说明:
http://art-blog.no-ip.info/wikipp/en/page/cppcms_1x_howto#How.to.compile.the.templates.with.cmake.

解决方法

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)

祝好运

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读