嵌入式C/C++项目的构建系统
我正在寻找一个高级构建系统/工具,可以帮助将我的嵌入式C项目组织到"模块"和"组件"中.请注意,这两个术语是高度主观的,因此我的定义在下面给出. 一个模块是C和H文件的凝聚力集合,但只有一个公共H文件可见其他模块. 另一方面的组件(或图层)是一个模块的集合(例如,应用层,库层,驱动程序层,RTOS层等). 构建系统/工具应 - 防止组件和模块之间的环状依赖性(模块内的循环依赖性可以) 防止进入模块的私人障碍.如果其他模块试图包含一个私有的模块的标头文件,则构建系统必须丢弃错误.但是,私人屏障中的文件必须能够在该障碍物中包含其他文件. 主机上自动支持和执行单位测试(TDD的快速反馈循环) 支持单元测试要在目标模拟器上进行 支持代码静态分析 支持代码生成 支持代码重复检测(强制干燥原理) 支持代码美化 支持生成单位测试代码覆盖范围 支持代码质量指标的生成 是独立于平台的 我可以编写自己的构建工具,并花费大量时间在上面.但是,那不是我的专业领域,如
0 2024-04-08
编程技术问答社区
标题的宏定义,放在哪里?
定义标头依赖的宏时,例如_FILE_OFFSET_BITS,FUSE_USE_VERSION,_GNU_SOURCE等,将它们放置在哪里? 我考虑过的一些可能性包括 在该文件中包含的标题所示的定义的任何源文件的顶部 在相关标头的包含之前 通过编译器在CPPFLAGS级别定义? (例如-D_FILE_OFFSET_BITS=64)对于: 整个源repo 整个项目 只是需要它的来源 在项目标题中,还应包括宏应用的那些相关标头 我没有想过的其他一些地方,但无限优越 注意:通过适用性,自动工具和其他构建系统的理由是我决定的一个因素. 解决方案 如果宏影响系统标头,他们可能应该去某个地方影响包括这些系统标头的每个源文件(其中包括间接包含它们的标题).因此,最合乎逻辑的位置将在命令行上,假设您的构建系统允许您设置例如cppflags影响每个文件的汇编. 如果您使用预编译标题,并且具有预编译的标题,因此必须首先包含在每个源文件中(例如,用于MSVC项目
2 2024-04-08
编程技术问答社区
CMake-获取多配置生成器的配置参数
我正在使用cmake生成视觉工作室解决方案.我希望我的解决方案具有多种配置-X86调试/发行版和X86_64调试/发行版. 对于每种配置,我都需要将项目与依赖项的不同版本链接(即我需要64位,调试构建与单位测试库的64位调试版本). 这是我想做的:我将依赖项的二进制版本放在配置之后的文件夹名称中,例如: /deps/x86_64_debug/library.lib 问题是,我该如何告诉Cmake在适当的文件夹中查找库?是否有任何CMAKE变量指示目标平台以及多核电生成器的"当前配置"的释放/调试状态? 解决方案 请咨询发电机表达式 在构建系统生成期间评估发电机表达式 产生特定于每种构建配置的信息.
0 2024-04-05
编程技术问答社区
为什么Gradle在编译/运行时classpath中不包括横向的依赖关系?
我正在学习Gradle的工作原理,我不了解它如何解决项目的依赖性. 目前,我有两个项目: Projecta:对外部库有几个依赖关系 Projectb:对Projecta只有一个依赖性 无论我如何尝试,当我构建ProjectB时,Gradle都不包含ProjectB的编译或运行时类Path中的任何Projecta依赖项(X和Y).我只通过将Projecta的依赖项包括在ProjectB的构建脚本中来使其正常工作,在我看来,这没有任何意义.这些依赖项应自动附加到ProjectB上.我很确定我缺少一些东西,但我不知道什么. 我已经阅读了有关" lib依赖性"的文章,但似乎仅适用于在这里,而不是外部依赖关系. 这是我在root项目中使用的构建. buildscript { repositories { mavenCentral() } dependencies { classpath 'com.androi
0 2024-04-04
编程技术问答社区
如何将一个Autotools项目转换为CMake项目?
因此,似乎有很多关于Autotools和Cmake的主题的文章,但是对于我的一生,我似乎找不到有关如何从Autotools转换项目的好教程configure.ac文件)到cmake(CMakeLists.txt文件).一个人怎么做? 解决方案 没有自动化工具可以将任意构建系统从自动工具转换为cmake.我手动转换了一些中等大型项目.我喜欢为每组configure.ac和/或Makefile.am文件创建一个CMakeLists.txt文件,以简化从Autotools到Cmake的转换. 可悲的是,这种手动方法需要在两个系统中发展专业知识,其中任何一个无辜者都不应构成其中的专业知识. 捕获自动工具构建实际上在计算机上实际上做的事情的记录.这将有助于您使用相同的编译标志来验证CMAKE构建系统实际上对每个文件进行编译,并创建AutoTools所做的每个库和可执行文件;至少在您的机器上,带有您的选择. %./configure [配置选项]> configure_au
2 2024-04-04
编程技术问答社区
cmake如何检查构建目标
我试图找到解决方案:如何检查构建目标? 考虑以下cmake脚本: cmake_minimum_required(VERSION 3.5.1) project(cppTests) # How to check at this point the target of build if(TARGET "cppTests") message(STATUS "Target is cppTests") else() message(STATUS "Target is not cppTests") endif() message(STATUS "Target is ${TARGET}") set(CMAKE_CXX_STANDARD 11) set(SOURCE_FILES main.cpp) add_executable(cppTests ${SOURCE_FILES}) 然后我致电以下内容: /home/username/Software/clion-
10 2024-04-04
编程技术问答社区
如何从命令行配置SVN的HTTP代理?
我脚本构建了我的构建环境的设置. (因此,如果构建过程发现自己在干净的映像上运行,则可以自行引导自己). 作为此过程的一部分,从公共SVN存储库中检索了某些依赖项. 构建机器位于代理后面,因此我需要配置SVN以使用代理. 由于各种原因 我可以手动编辑〜/.subversion/服务器文件,但是我宁愿将构建过程保持自动和自动化. 另外,我可以"代理"具有内部"依赖项"存储库的各种公共颠覆存储库,但这增加了需要维护的活动部件的数量. 最后,我可以编写一个脚本来检查配置文件并修改它(如果需要),但这似乎是构建过程中应该是微不足道的部分的过度kill. 理想情况下,我应该能够从命令行指定代理,但是很明显这是可能的.解决此问题的正确方法是什么? 解决方案 svnbook 正如您已经提到的,您可以将SVN配置选项添加到svn命令行客户端. 参见 设置,在命令的持续时间内,运行时的值 配置选项. confspec是一个指定的字符串 配置选项名称空间,
0 2024-04-04
编程技术问答社区
您可以使用介子的球源代码吗?
是否可以在介子构建中亮源代码文件? 解决方案 拒绝地球源文件,是不良习惯,不仅在梅森上.它会导致奇怪的错误,使得很难将一些开发文件抛在一边进行开发,但您不想构建或发货,并且可能会引起增量构建的问题. 显式比隐式更好. 2021-03-02编辑: 另请阅读为什么不能我用通配符指定目标文件?在Meson FAQ中. Meson不支持此语法,其原因很简单.这不能既可靠又快速. 如果在所有警告之后,您仍然想自行冒险,FAQ告诉您如何在,但我真的想使用通配符!.您只需使用外部脚本来执行全球并返回文件列表(该示例中称为grabber.sh). c = run_command('grabber.sh') sources = c.stdout().strip().split('\n') e = executable('prog', sources) 其他解决方案 我找到了示例在介子单元测试中,显示了如何汇总源,但在评论中说这是不建议的. . if
8 2024-04-04
编程技术问答社区
什么时候使用gradle.properties与settings.gradle?
gradle build有三个文件 build.gradle定义构建配置脚本 gradle.properties settings.gradle 问题 settings.gradle&gradle.properties? 之间有什么区别 什么时候应该将设置放入settings.gradle vs中. gradle.properties? 解决方案 settings.gradle settings.gradle文件是一个令人讨厌的脚本,就像build.gradle文件一样.每个构建中只能执行一个settings.gradle脚本(与多项目构建中的多个build.gradle脚本相比). settings.gradle脚本将在任何build.gradle脚本之前,甚至在 Settings Settings 对象.使用此Settings对象,您可以在构建中添加子标记,从命令行修改参数( Gradle 目的是注册生命周期处理程序.结果,如果您的设置与构建相关
2 2024-04-04
编程技术问答社区
Autotools、Cmake和Scons之间有什么区别?
自动工具,CMAKE和SCON之间有什么区别? 解决方案 实际上,Autotools'唯一的"拯救恩典"是所有GNU项目在很大程度上使用的. 自动工具的问题: 真正的奥术M4宏观语法与详细的,扭曲的外壳脚本结合了"兼容性"的测试,等等. 如果您不关注,您 将 弄乱交叉补偿能力(IT 应该清楚地指出,诺基亚提出了Scratchbox/ScratchBox2到侧键 高度 损坏的自动工具为Maemo/Meego构建设置. ,测试中的静态路径,您将打破跨编译支持,因为它不会符合您的SYSROOT规范,并且会从主机系统中拉出东西.如果您违反跨编译支持,它将使您的代码无法使用 openembedded,使试图在交叉补偿器上而不是在目标上构建其发行版的发行版变得"有趣". 对古老的,破碎的编译器的问题进行了大量测试,这些问题 当今这个时代,当前几乎可以生产任何东西.除非您在真正的 古代 版本的Solaris,Aix或类似版本上构建Glibc,libstdc ++或GCC之类
2 2024-04-04
编程技术问答社区
让CMake递归地扫描文件夹?
如何设置cmake以递归扫描给定目录并确定源文件列表? 我的项目是共享库.我的文件夹结构与此类似: / src/ # Source files in an arbitrary tree include/ # Headers, tree mirrors that of the src/ folder examples/ # Executable code examples that link against the library CMakeLists.txt 我希望cmake递归扫描src和include,并确定项目中源和标头文件的列表,无论目录结构如何.我也想避免: 用无尽的CMakeLists.txt文件污染src/和include/目录 每次我更改文件夹结构时都必须更改和调整脚本 每个示例都有自己的构建脚本是可以的. 解决方案 cmake提供以下递归文件的命令:
0 2024-04-04
编程技术问答社区
CMAKE_BUILD_TYPE在CMakeLists.txt中没有被使用。
我将默认的构建配置设置为发布时遇到困难.在我的cmakelists.txt文件中,我将CMAKE_BUILD_TYPE设置在文件的顶部: #enable Release ALWAYS, configure vars set(CMAKE_BUILD_TYPE Release) set(EXECUTABLE_NAME "ParticleSimulator") set(VERSION_MAJOR 0) set(VERSION_MINOR 2) 但是,在构建项目并打开解决方案时,我总是会呈现调试模式,与我在CMakelists文件中指定的相反.我在做什么错? 我在那里查看了其他一些问题,但是我没有看到任何特定于这个问题的问题. cmakelists.txt .. 解决方案 有两种类型的发电机:单个配置和多构型. 单一配置 类似于制造的生成器: unix makefiles "> nmake makefiles "> nmake makefiles /www.
4 2024-04-04
编程技术问答社区
嵌入式C/C++项目的构建系统
我正在寻找一个高级构建系统/工具,可以帮助将我的嵌入式C项目组织到"模块"和"组件"中.请注意,这两个术语是高度主观的,因此我的定义在下面给出. 一个模块是C和H文件的凝聚力集合,但只有一个公共H文件可见其他模块. 另一方面的组件(或图层)是一个模块的集合(例如,应用层,库层,驱动程序层,RTOS层等). 构建系统/工具应 - 防止组件和模块之间的环状依赖性(模块内的循环依赖性可以) 防止进入模块的私人障碍.如果其他模块试图包含一个私有的模块的标头文件,则构建系统必须丢弃错误.但是,私人屏障中的文件必须能够在该障碍物中包含其他文件. 主机上自动支持和执行单位测试(TDD的快速反馈循环) 支持单元测试要在目标模拟器上进行 支持代码静态分析 支持代码生成 支持代码重复检测(强制干燥原理) 支持代码美化 支持生成单位测试代码覆盖范围 支持代码质量指标的生成 是独立于平台的 我可以编写自己的构建工具,并花费大量时间在上面.但是,那不是我的专业领域,如
2 2024-04-04
编程技术问答社区
如何在yocto build中添加第三方库作为包
我有一个不著名的库,并且该库中没有包装local.conf 中添加python或任何其他食谱 我的local.conf看起来像 MACHINE ?= "phyboard-regor-am335x-1" DISTRO ?= "yogurt" # The following line disables the autostart of the phytec-qtdemo by # default, but you can start the demo anytime using # $ systemctl start phytec-qtdemo.service #SYSTEMD_AUTO_ENABLE_pn-phytec-qtdemo = "disable" # That are the default values of bitbake. Adapt these to your workspace and # host preferences. #DL_DIR = "$
2 2024-03-31
编程技术问答社区
Yocto Dunfell错误 '没有可用的配方',在单个自定义元层中有多个机器
我维护与Dunfell兼容的自定义Yocto元层.它支持基于Microchip SAMA5D27处理器的董事会.我在此层中有几个BBAppend文件,它们仅适用于Meta-Atmel和其他Microchip特定软件包中的文件. 现在,我想重新使用此自定义元层的许多部分,并支持来自其他供应商的新处理器.我在我的一层中创建了自己的新图像食谱,其中不包含仅与Microchip相关的这些BBAppend文件. 问题在于,Yocto作为错误的BBAppend文件作为错误'无用的食谱.错误似乎在解析过程中发生,并且没有考虑我是否在当前目标中使用该食谱. 我已经广泛搜索了解决方案,但到目前为止已经空了.如何使用1个元层并维护不同的bbappend文件,同时可以为不同的目标构建切换机器变量? bitbake版本: root@buildmachine:/$ bitbake --version BitBake Build Tool Core version 1.46.0 我
2 2024-03-31
编程技术问答社区
构建规则中的Bazel环境变量
我想参考BUILD文件中的DirectX SDK.问题在于(据我了解)Bazel仅通过Bazel的--action_env=DXSDK_DIR参数来传递环境变量,并且它应在操作中使用,该操作必须在插件(.bzl文件)中定义. 是否有任何更轻松的方法可以将环境变量用作MAKE变量(includes = [ "$(DXSDK_DIR)/Include" ]),或者我需要编写插件? 解决方案 原则上您需要一个cc_library规则hdrs属性glob the directx标头.为此,您需要假装DX SDK是源树的一部分.巴泽尔为此目的提供"存储库规则". 1.为DirectX SDK 创建一个存储库规则 取决于SDK的位置是已知还是需要发现,您有两个选择. a.修复了SDK位置 ,如果您不需要读取任何环境变量,运行任何二进制文件或查询注册表以查找SDK所在位置,则可以使用此方法.如果构建规则的每个人都将SDK安装到同一位置. 是这种情况. 只需添加
10 2024-03-29
编程技术问答社区
在安卓系统的蚂蚁中启用 "multi-dex "选项
很容易为Gradle Build System启用多戴克斯选项,但是我还没有找到示例,我如何启用此选项进行蚂蚁构建.如何存档? 解决方案 我们有2个选项: 更改Dexexectask [引入多DEX的新参数],编译Ant.jar,使用此罐子进行构建.我不喜欢这个选项,因为我们必须为所有团队成员提供更新的ant.jar. 修改项目build.xml文件.我找到了很棒的蚂蚁构建文件,它具有支持Multi-Dex的所有修改: github.com/ruboto/ruboto-irb/blob/master/build.xml 希望,它会有所帮助. 其他解决方案 我在应用程序中使用基于至于build.xml,如果所有路径彼此都很好,则必须查看一下,您可能已经更改了其中的一些,并且需要调整蚂蚁步骤. 在我的情况下,我还必须生成必须放置在第一个生成的dex(默认一个)中的类的列表,因此该应用甚至可以在加载应用程序弹出中加载其他DEX时启动.为了做到这一点,您需要运
2 2024-02-26
编程技术问答社区
内部循环;建筑可能产生不可靠的结果: Xcode错误
使用Xcode编译时,我正在尝试转到新的构建系统.但是,它给出以下错误: Cycle details: → Target 'project' : LinkStoryboards Target 'project' has compile command with input '/Users/project/Commons/Components/ScreenshotSharing/ViewController/AppShare.storyboard' Target 'project' : ValidateEmbeddedBinary /Users/project/Xcode/DerivedData/project-hgqvaddkhmzxfkaycbicisabeakv/Build/Products/Debug-iphoneos/project.app/PlugIns/stickers.appex Target 'project' has process command with
14 2023-12-18
编程技术问答社区
从 ST 编辑器运行 python 脚本时,如何在控制台中显示结果?
我是新手的崇高文本,所以到目前为止,它的内部内容都不熟悉.据我所知,这个问题可能是与我有一个python脚本 var = raw_input("Enter something: ") print "You entered ", var 要求输入,等待它,然后在Windows Console提示中打印出来. 如何在"构建"时制作ST3以在控制台窗口中显示结果? 解决方案 这真的很简单,只需发出命令即可启动新的cmd.exe. start cmd /K python main.py 参见在这里 /k flag" pipes"其他命令向cmd.exe运行,直到您自己退出外壳,对于您想查看痕迹时很有用. /c flag"管道"其他命令向cmd.exe运行,直到Python程序完成. 因此,在您的项目文件中,您应该有这样的东西: "build_systems": [ { "name": "RunPY",
4 2023-12-07
编程技术问答社区
Visual Studio是否支持向项目添加MSBuild任务?
我正在尝试将一些简单的MSBUILD任务添加到Visual Studio Project(VS 2012 Express) - 具体来说,要创建一个子目录,然后将一些文件复制到准备包装的输出目录的子目录中. . 我看到VS支持自定义构建步骤,即命令行调用.但是,由于VS基于MSBUILD,因此应该可以直接添加它们作为 msbuild任务喜欢复制任务 http://msdn.microsoft.com/en-us/library/ms366724.aspx" rel =" nofollow">建立后构建预定的目标. 我找不到的是在Visual Studio框架内实际添加此类任务的任何方法. 文档仅从msbuild的角度来谈论它,而不是在Visual Studio的UI中如何工作.它似乎也没有讨论指构建输出等的属性.大概是他们只是MSBUILD使用的那些. 在Visual Studio的UI中是否有支持MSBUILD任务管理的支持,而我的Express Edition只是
6 2023-12-06
编程技术问答社区