草庐IT

technically-speaking-what-makes-g

全部标签

【Linux】make和makefile详解

目录一、概述二、为什么要用makefile三、创建简单的Makefile四、makefile的规则五、makfile的工作流程六、makefile中声明变量七、clean与伪目标一、概述当谈论到Linux中的软件构建工具时,不得不提到Makefile。Makefile是一种文件,它包含了一组规则,用于指导构建系统在源代码中生成可执行文件或库。它是使用GNUMake软件的标准格式。Makefile的主要目的是描述代码文件之间的依赖关系以及如何构建以达到特定目标。通过定义规则和命令,开发人员可以轻松地管理项目的复杂构建过程。Makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个ma

c++ - 用于桌面 Gui 应用程序的 Qt 4.x/5.x 和 OpenGL : What module to choose?

我正在为Linux/Windows桌面使用Qt和OpenGL开始一个新的GUI应用程序项目。到目前为止,我的假设是:使用QtGUI(C++...而不是QML/QtQuick2)和OpenGL4.1或更高版本(要求)。阅读之后,我完全不知道选择什么路径。什么途径可以使我的应用程序在支持和库方面永不过时。Qt4.x还是Qt5.x?标准OpenGL或QGL或QOpenGL或QtOpenGL包装器?QWidget/QGLWidget(Qt4.x)或QWindow(Qt5.x)?该应用程序旨在在桌面环境中运行,并将执行大量文件(几何)打开/保存、实例化3D绘画和​​一些成像。如果可能的话,有人可

c++ - 销毁并重新生成赋值运算符 : what if I'm careful?

这是一个糟糕的模式。copy-and-swap更好。foo&operator=(fooconst&other){static_assert(noexcept(new(this)foo()),"Exceptionsafetyviolation");this->~foo();try{new(this)foo(other);}catch(...){new(this)foo();//doesnotthrowthrow;}return*this;}只要foo是notpolymorphic,会出什么问题?(但是,假设它是一个基类。)背景:我正在处理本地存储类型删除,替代方案是通过本地存储空间将sw

c++ - 使用带有 `make check` 的 Boost 单元测试框架 (UTF)

我的C++应用程序有各种基于shell的独立程序集成测试以及应用程序API的源代码单元测试。测试通过makecheck目标运行,该目标通过Autotools(autoconf、automake)生成,comewithatest-driverandalogparser.我已经开始采用Boost单元测试框架来更好地管理单元测试套件。有没有办法在makecheck目标下同时运行验收测试和单元测试(使用BoostUTF和标准TAP测试)?我的Makefile.am看起来像这样:check_PROGRAMS=test1test2SOURCES=test1.cpptest2.cppCC=g++TE

c++ - 回复:使用 boost::make_transform_iterator 进行引用访问

我正在尝试使用boost::make_transform_iterator为自定义类创建迭代器,该自定义类的数据保存在映射中,迭代器使用键vector来访问值。在我的问题中,map的值是容纳大量数据的容器。由于我无力复制数据,因此我想通过迭代器通过引用访问数据。但是,这样做时,数据已损坏,如我所附的简单示例的输出所示。据我所知,问题在于使用from_key仿函数(使用映射引用初始化)和boost::make_transform_iterator的语义。关于如何使用boost正确执行此操作的任何想法?谢谢,帕特里克#include#include#include#include#incl

c++ - 从 Eclipse 中的现有 Makefile 推断包含路径和 make 目标

我正在尝试在现有的文件夹集合上使用Eclipse,其中包含C++和Linux中的递归Makefile文件。make文件使用gcc和ar,用户指定他要使用的gcc的路径生成文件。我将使用的make文件是手工输入的。在Eclipse中,有一个选项可以创建一个看起来适合我需要的新项目:“从同一目录中的现有代码创建一个新的Makefile项目”。**crossGCC*GNUAutotoolsToolchain*LinuxGCC这里我有两个问题:我应该选择哪个工具链?Eclipse如何使用这些信息?我希望Eclipse从顶级Makefile中尽可能多地推断(例如,include路径、生成targ

c++ - libstdc++ 的 make_shared 布局是否在 gcc 4.x 和 gcc 6.x 之间发生了变化?

考虑以下由三个文件组成的最小示例:foo.h:#pragmaonce#includestructX{uint64_ti=0xdeadbeefdeadbeefULL;};voidfoo();foo.cxx:#include"foo.h"voidfoo(){std::make_shared();}main.cxx:#include#include"foo.h"templatestd::shared_ptrstd::make_shared();intmain(){foo();}然后用不同版本的gcc编译这两个翻译单元:$g++-4.8.2-g-std=c++11-O0-cfoo.cxx-of

c++ - 在抛出 'std::invalid_argument' what() : stoi 实例后终止调用

stoi函数使程序崩溃并显示错误消息"****@****:~>g++-std=c++0xm1.cppstimulation.hstims.hTask.hexoskeleton.hARAIG_Sensors.hProfile.hARAIG_Sensors.h:1:9:warning:#pragmaonceinmainfile[enabledbydefault]Profile.h:1:9:warning:#pragmaonceinmainfile[enabledbydefault]*****@****:~>a.outStimulationConfig.csvTaskConfiguratio

c++ - clang 3.8 make 文件失败

挠了挠脑袋3个多小时后,我终于放弃了,决定向你们求助。我有几个文件,它们将编译成一个可执行文件。使用-stdlib=libc++flag,我会得到/usr/include/c++/v1/string:1938:44:error:'basic_string'ismissingexceptionspecification'noexcept(is_nothrow_copy_constructible::value)'basic_string::basic_string(constallocator_type&__a)^/usr/include/c++/v1/string:1326:40:no

c++ - 通过 make_shared 停止堆分配

我想强制我的对象在堆栈上以执行非常严格的语义并解决一些生命周期问题。我已经阅读了几篇关于如何执行此操作的文章,并最终将operatornew设为私有(private)(或删除)。当直接使用new时,这似乎按预期工作,但make_shared编译正常。#includeclassA{private:void*operatornew(size_t);voidoperatordelete(void*);void*operatornew[](size_t);voidoperatordelete[](void*);};intmain(){//A*a=newA;//Correctlyproduces