我编写了一个程序prg,它可以使用bash使用下面的一些子命令运行
$ prg subcommand1
Output of subcomman1
$ prg subcommand2
Output of subcomman2程序用C++11编写,用CMake (3.10+)编译。
现在,我想添加另一个可选的命令,比如optional_subcommand。可选的--在某种意义上,用户可以在配置Cake时决定是否使用它编译程序。为了澄清的是,当代码是而不是optional_subcommand支持的编译optional_subcommand时,输出应该是这样的。
$ prg optional_subcommand
Option not supported...optional_subcommand需要安装外部库。因此,find_package(SomeLib REQUIRED)必须在某个阶段由CMake调用。optional_subcommand的代码需要这个库来编译。
我所能想到的就是为optional_subcommand编写一些虚拟代码,然后根据CMake的请求进行替换。我认为这可以通过要求CMake覆盖来实现,比方说,不管是虚拟的还是非虚拟的optional_subcommand.cpp。
提出的解决方案是否明智,或者是否有更好的方法来实现这一点?
发布于 2022-10-19 11:26:58
如果需要,CMake可以定义一个预处理符号,并向目标添加额外的文件(在下面,prg):
if(SomeLib_FOUND)
target_compile_definitions(prg PUBLIC HAVE_SOMELIB)
target_sources(prg PRIVATE src/optional_subcommand.cpp)
endif()然后,您可以将optional_subcommand的命令分派代码包装为#ifdef HAVE_SOMELIB。
https://stackoverflow.com/questions/74124172
复制相似问题