自动生成的源代码和cmake配置:开发人员构建与用户构建

自动生成的源代码和cmake配置:开发人员构建与用户构建,cmake,packaging,Cmake,Packaging,这个问题是关于设置CMake配置文件,以便为普通用户以及共同开发人员提供服务 两个用户组都需要编译。它们之间的区别在于,联合开发人员在编译之前会运行大量代码生成器或转换器,如flex/bison、swig或pod2man。这些工具不应与我们的源程序包一起提供,但应作为外部依赖项提供。但是,应向普通用户提供所有自动生成的代码,以便他们不需要安装和运行除cmake、make和编译器以外的任何工具 现在的问题是:如何设置主CMakeLists.txt,以便在cmake时我们只编译,而在cmake时需要

这个问题是关于设置CMake配置文件,以便为普通用户以及共同开发人员提供服务

两个用户组都需要编译。它们之间的区别在于,联合开发人员在编译之前会运行大量代码生成器或转换器,如
flex/bison
swig
pod2man
。这些工具不应与我们的源程序包一起提供,但应作为外部依赖项提供。但是,应向普通用户提供所有自动生成的代码,以便他们不需要安装和运行除cmake、make和编译器以外的任何工具

现在的问题是:如何设置主
CMakeLists.txt
,以便在
cmake
时我们只编译,而在
cmake
时需要并运行所有辅助工具?作为一种明显的改进,更细粒度的标志应该允许打开或关闭单个工具。

尽可能简单

option(DEVELOPER_MODE "This will run developer tools during build" OFF)

...

if(DEVELOPER_MODE)
 add targets for flex and stuff
endif()
现在使用
cmake-D DEVELOPER\u MODE=YES..
配置您的构建以启用它。

尽可能简单

option(DEVELOPER_MODE "This will run developer tools during build" OFF)

...

if(DEVELOPER_MODE)
 add targets for flex and stuff
endif()

现在,使用
cmake-D DEVELOPER\u MODE=YES..
配置您的构建以启用它。

如果您不打算将代码生成器或转换器与源代码包一起分发给“普通用户”,您可以将其用作一种区别。只需检查工具或其子目录是否存在。主要的问题是如何交付代码生成器或转换器的输出(通常会在“共同开发人员”的二进制输出目录中结束)?为了避免重复文件(交付和生成),您可以将输出添加为Zip格式,并在生成构建环境时将其解压缩到二进制输出中。@Florian:用户可以自由地在用户和开发人员之间更改角色;工具的存在不应自动触发其使用。在您评论的第二部分中,您提出了一个重要问题:自动生成的代码应该保存在哪个目录中?如果您不打算将代码生成器或转换器与源程序包一起分发给“普通用户”,您可以将其作为一个区别。只需检查工具或其子目录是否存在。主要的问题是如何交付代码生成器或转换器的输出(通常会在“共同开发人员”的二进制输出目录中结束)?为了避免重复文件(交付和生成),您可以将输出添加为Zip格式,并在生成构建环境时将其解压缩到二进制输出中。@Florian:用户可以自由地在用户和开发人员之间更改角色;工具的存在不应自动触发其使用。在你评论的第二部分,你提出了一个重要的问题:哪个目录应该保存自动生成的代码?谢谢。我接受了,因为我的问题不够清楚,无法期待得到更详细的答案。我仍然不清楚如何组织源代码目录和构建目录,因为自动生成的文件对于用户来说是源代码,但是对于开发人员来说属于
build
。我可能会问另外一个问题。生成这些文件时,您可以使用
${CMAKE\u CURRENT\u SOURCE\u DIR}/out.file
作为输出文件名。谢谢。我接受了,因为我的问题不够清楚,无法期待得到更详细的答案。我仍然不清楚如何组织源代码目录和构建目录,因为自动生成的文件对于用户来说是源代码,但是对于开发人员来说属于
build
。我可能会问一个单独的问题。生成这些文件时,可以使用
${CMAKE\u CURRENT\u SOURCE\u DIR}/out.file
作为输出文件名。