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