小编Pie*_*tro的帖子

Meson 选择了错误的编译器(GCC 而不是 clang)

我正在尝试将我的项目配置为使用 LLVM/clang++ 构建,但始终选择 GCC:

$ /opt/llvm/clang+llvm-7.0.1-x86_64-linux-gnu-ubuntu-18.04/bin/clang++ --version
clang version 7.0.1 (tags/RELEASE_701/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /opt/llvm/clang+llvm-7.0.1-x86_64-linux-gnu-ubuntu-18.04/bin
$ 
$ CC=/opt/llvm/clang+llvm-7.0.1-x86_64-linux-gnu-ubuntu-18.04/bin/clang++ meson ~/build
The Meson build system
Version: 0.49.1
Source dir: ~/source
Build dir: ~/build
Build type: native build
Project name: test
Project version: 0.1.0
Native C++ compiler: ccache c++ (gcc 6.3.0 "c++ (Debian 6.3.0-18+deb9u1) 6.3.0 20170516")
Build machine cpu family: x86_64
Build machine cpu: x86_64
Message: Compiler: GCC
Dependency threads found: YES 
Build targets in project: 2
Found ninja-1.8.2 …
Run Code Online (Sandbox Code Playgroud)

c++ gcc clang clang++ meson-build

5
推荐指数
1
解决办法
1万
查看次数

Git:无法识别的分支名称

在git中,我命名了一个分支:parse()

名称已被接受,但是在合并时出现错误:

git merge parse()bash:意外令牌'('附近的语法错误

是否可以重命名分支?还有其他方法可以解决此问题吗?

谢谢!

平台:Linux,bash

git branching-and-merging git-branch

4
推荐指数
1
解决办法
1463
查看次数

从Qt文件编译时间错误:')'令牌之前的预期unqualified-id

将我的项目从Qt4移植到Qt5.1,我从Qt文件中收到此错误:

C:\Qt\Qt5.1.1\5.1.1\mingw48_32\include\QtGui\qopenglversionfunctions.h:785: error: expected unqualified-id before ')' token
     void (QOPENGLF_APIENTRYP MemoryBarrier)(GLbitfield barriers);
                                           ^
Run Code Online (Sandbox Code Playgroud)

这是定义链:

#define QOPENGLF_APIENTRYP QOPENGLF_APIENTRY *
#define QOPENGLF_APIENTRY APIENTRY
#define APIENTRY WINAPI
#define WINAPI __stdcall
Run Code Online (Sandbox Code Playgroud)

我注意到libQt5OpenGLExtensionsd.a库中存在"MemoryBarrier"标记.我是否应该包含它,即使在最初的Qt4项目中也没有使用与OpenGL相关的内容?

平台:
Windows 7
MinGW 4.8
Qt 4.8 - > Qt 5.1

c++ qt mingw qtgui qt5

4
推荐指数
2
解决办法
6266
查看次数

如何在QtCreator中更改构建目录?

我有一个基于cmake的C++项目,用QtCreator完成.我手动编写了CMakeLists.txt文件.从QtCreator的命令行构建时,我按预期获得此目录结构:

MyProj/            - source code
MyProj_build/      - object files and executable; I launch cmake from here
Run Code Online (Sandbox Code Playgroud)

现在我希望构建目录位于不同的磁盘(ram磁盘)上:

/PathToRamDisk/MyProj_build/
Run Code Online (Sandbox Code Playgroud)

从命令行构建时,我从新的构建目录启动cmake/make,并且所有生成的文件都位于该目录中.精细.

从QtCreator,即使我将构建路径更改为新路径(选项/构建和运行/常规/默认构建目录),构建仍在旧目录中完成.还有另一条改变之路吗?哪里?

平台:QtCreator 3.3.0,Mac OSX

directory build cmake qt-creator

4
推荐指数
3
解决办法
9885
查看次数

memset()初始化构造函数中的对象?

我发现这段使用memset()初始化对象的C++代码:

struct Message
{
   Message()
   {
      memset(this, 0, sizeof(Message));
   }

   unsigned int a, b, c;
};
Run Code Online (Sandbox Code Playgroud)

由于这是一个POD结构,这个代码应该没问题.
使用memset而不是构造函数是否有任何优势,例如:

Message() : a(0), b(0), c(0) {}
Run Code Online (Sandbox Code Playgroud)

c++ constructor initialization memset

4
推荐指数
2
解决办法
1293
查看次数

可以在可变参数模板中推导出容器类型吗?

在C++ 11/C++ 14中,

template <
   typename T ,
   template <typename...> class Container_t
>
void MyFunc(Container_t<T> &data) { ... }


template <typename T>
void MyFunc2( T v ) { ... }


int main()
{
   std::vector<char> v;

   MyFunc<char, std::vector>(v);     // OK
   MyFunc(v);                        // error

   int i;

   MyFunc2<int>(i);                  // OK
   MyFunc2(i);                       // OK
}
Run Code Online (Sandbox Code Playgroud)

我收到了一个错误MyFunc(v).

是否有可能让编译器找出传递给可变参数模板函数的容器类型?我发现没有问题,就像普通模板中的普通类型一样.

如果我需要更改v的类型,是否必须修复对MyFunc的所有调用?

编译器:Microsoft Visual C++ 2015(v140)

c++ templates variadic-templates c++11

4
推荐指数
2
解决办法
478
查看次数

std :: copy_n不会更改目标向量大小

如果我为一个向量保留了一些空间,然后我用它复制了一些值std::copy_n(),我得到正确复制并可访问的值,但向量的大小仍为零.这是预期的行为吗?我应该调整矢量大小,即使它没有效率吗?

#include <algorithm>
#include <iostream>
#include <vector>

int main()
{
    std::vector<double> src, dest;

    for(double x = 0.0; x < 100.0; ++x)
        src.push_back(x);

    dest.reserve(src.size());

    std::copy_n(src.cbegin(), src.size(), dest.begin());

    std::cout << "src.size() = " << src.size() << std::endl;
    std::cout << "dest.size() = " << dest.size() << std::endl;

    for(size_t i = 0; i < src.size(); ++i)
        std::cout << dest[i] << "  ";

}
Run Code Online (Sandbox Code Playgroud)

编译器测试:clang,gcc,Visual C++

c++ copy stdvector stl-algorithm c++11

4
推荐指数
1
解决办法
573
查看次数

无法在 C++ 项目上从 Meson 运行 Doxygen

我无法通过 Meson 的配置运行 Doxygen。

这是中的相关代码meson.build

doxygen = find_program('doxygen')
...
run_target('docs', command : 'doxygen ' + meson.source_root() + '/Doxyfile')
Run Code Online (Sandbox Code Playgroud)

成功找到了 doxygen 可执行文件:

找到程序 doxygen:是 (/usr/bin/doxygen)

但是,当启动时,我收到此错误消息:

[0/1] 运行外部命令文档。
无法执行命令“doxygen /home/project/Doxyfile”。文件未找到。
失败:介子文档

从命令行手动运行它可以工作:

/usr/bin/doxygen /home/project/Doxyfile
doxygen /home/project/Doxyfile
Run Code Online (Sandbox Code Playgroud)

我的meson.build配置有什么问题?

c++ configuration doxygen meson-build

4
推荐指数
1
解决办法
993
查看次数

boost::any 需要 RTTI 吗?

在 Boost 网站上,我没有发现有关 boost::any 使用或 RTTI 的信息。

我在几个地方读到这是一个要求,但后来我构建了一个简单的测试项目,它在有和没有 RTTI 的情况下构建。

那么,存在性能和内存问题的 RTTI 是否需要 boost::any 和类似的类?

c++ performance boost rtti boost-any

3
推荐指数
1
解决办法
892
查看次数

如何从 Meson 脚本运行 shell 命令?

如何cp从 Meson 构建脚本运行 shell 命令(例如,复制)?

我尝试使用以下代码:

r = run_command('cp', 'test.txt', 'test2.txt')

if r.returncode() != 0
  warning('Command failed')
endif
Run Code Online (Sandbox Code Playgroud)

但它什么也没做。
run_command运行成功(返回 0),但未复制文件。
如果我cp用替换cp3,我会从 Meson 收到一条错误消息,进程终止,甚至不会到达下一行。
如果我替换test.txttest0.txt,我会从脚本中收到一条错误消息。

因此该脚本行为正确,但该命令在文件系统上没有留下任何痕迹。

run_command从 Meson 运行 shell 命令的唯一方法吗?我究竟做错了什么?


参考: https: //mesonbuild.com/External-commands.html

shell command file-copying meson-build

3
推荐指数
1
解决办法
4097
查看次数