c – 在安装之前和之后使用CMake一致配置文件路径
我在层次结构中有不同的库和可执行文件作为子项目.他们中的大多数都是守护进程.所以我有他们相应的cfg文件,这些应用程序在启动时读取.
我有两个问题. >让我们有一个简单的场景:单个项目没有层次结构.我必须使用/不安装运行应用程序.所以如果我把一个安装指令保存在/ etc中,我可以获得一个常量的cfg路径.但在我不希望安装的情况下.我想在make之后立即运行可执行文件.那么如何以这样的方式管理cfg呢? 但是我可以在monitor.cfg中放入include指令来包含a.cfg和b.cfg.但这归结为同样的问题.使用/不使用install来寻址cfg文件的路径. abcd cfg # configuration files abcd # to be copied to /etc/abcd on install a.cfg # configuration b.cfg monitor.cfg includes/cfg sources -> libabcd-cfg.so # target library that abstracts configurations as objects components a: cfg # sub project a (requires abcd/a.cfg) -> a # target executable b: cfg # sub project b (requires abcd/b.cfg) -> b # target executable monitor: cfg # sub project monitor (requires abcd/a.cfg,b.cfg,monitor.cfg) -> monitor # target executable 一个简单的解决方案是将一组全局搜索路径保存在首先搜索的cfg / includes / cfg / defs.h中.然后搜索/ etc.但是配置文件保存在不同的项目中.不管用. 解决方法
很久以前我遇到过类似的问题:我想在构建之后立即测试项目(没有安装).据我所知,这个问题没有共同的模式.可能的方法是:
>从构建一中的安装树重现相对路径.在这种情况下,可执行文件应使用地址cfg文件的相对路径.如果将所有可执行文件安装到同一目录中,则可以将变量CMAKE_RUNTIME_OUTPUT_DIRECTORY设置为二叉树内的某个目录.因此,所有二进制文件都将在给定目录中生成. (如果使用add_subdirectory()方法构建子项目,则在顶级项目中设置变量将影响所有子项目).对于配置文件,您可以使所有子项目使用相同的变量来构建它们: if(NOT DEFINED CFG_OUTPUT_DIRECTORY) # Use in-subproject path by default. set(CFG_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/cfg") endif() configure_file(a.cfg.in `${CFG_OUTPUT_DIRECTORY}`/a.cfg) 同样,在顶级项目中设置此类CFG_OUTPUT_DIRECTORY变量将影响子项目. A_CFG_PATH=${CMAKE_CURRENT_BINARY_DIR}/a.cfg a.exe <args> (对于运行已安装的可执行文件,您根本不需要设置环境变量).>根本不支持从构建树运行可执行文件.从测试的结果来看它有原因:我们为什么要测试构建树,而预期的用户将使用安装树. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |