Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile CMake-为不同配置生成自定义生成路径_Makefile_Cmake - Fatal编程技术网

Makefile CMake-为不同配置生成自定义生成路径

Makefile CMake-为不同配置生成自定义生成路径,makefile,cmake,Makefile,Cmake,我有一个项目,其生成过程为每个配置生成不同的生成工件,例如,如果使用make a=a0 b=b0启动,它将对象文件构建到builds/a0.b0,生成二进制myproject.a0.b0,最后更新一个不明确的可执行链接,指向最近构建的项目ln-s myproject.a0.b0 myproject。对于本项目,这是一个有用的功能,主要是因为: 它为不同的配置分离对象文件(因此,当我在另一个配置中重建时,我不必使用新的定义和配置集重新编译每个源代码,(不幸的是)这是一个非常常见的过程) 它保留每

我有一个项目,其生成过程为每个配置生成不同的生成工件,例如,如果使用
make a=a0 b=b0
启动,它将对象文件构建到
builds/a0.b0
,生成二进制
myproject.a0.b0
,最后更新一个不明确的可执行链接,指向最近构建的项目
ln-s myproject.a0.b0 myproject
。对于本项目,这是一个有用的功能,主要是因为:

  • 它为不同的配置分离对象文件(因此,当我在另一个配置中重建时,我不必使用新的定义和配置集重新编译每个源代码,(不幸的是)这是一个非常常见的过程)
  • 它保留每个配置的二进制文件(因此,如果已经构建了配置,则无需重新构建以使用不同的配置)
  • 它复制(或链接)到最后构建的二进制文件,这在测试中很有用
现在,这是在一个丑陋的几十年历史的不可移植的Makefile中实现的。我想在CMake中复制相同的行为,以便在其他平台上更轻松地构建,但我无法以任何合理的方式复制它。这看起来像是用add_library/executable添加目标,但对输入参数的每个可能排列这样做似乎是错误的。而且我不确定我是否能够获得正确的利用率,允许
make
make a=a0
make b=b0a=a0
而不是指定cmake目标所需的:
make myproject-a0.b0

在cmake中可以这样做吗?即:

  • 根据输入参数指定生成目录
  • 接受参数作为make参数,这些参数可以省略(默认设置),以在makefile级别选择适当的目标(因此无需为新配置重新运行cmake)

这是真的,但这两个文件不都支持makefiles吗?(对于VS案例,通过nmake)。尽管转移到cmake然后人为地限制构建环境可能有点愚蠢。。。你能再给我解释一下你的方法吗?是否需要同时指定-B_builds-AxBx和参数-DA=Ax-DB=Bx?是否有一个选项仅用于
cmake-DA=Ax-DB=Bx,然后是任何构建过程?(make/VS/Xcode)我指的是我通过使用make参数而不是cmake参数来限制构建环境。但是,是的,您给出的示例需要输入参数和构建目录,但后者应该生成,以便始终保持一致(因此不可能(容易)离开已建立的结构)。所以
cmake-DA=Ax-DB=Bx
我得到了一个生成文件/项目文件/etc,它将在
builds/project.Ax.Bx