我正在尝试将我的项目配置为使用 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) 在git中,我命名了一个分支:parse()
名称已被接受,但是在合并时出现错误:
git merge parse()bash:意外令牌'('附近的语法错误
是否可以重命名分支?还有其他方法可以解决此问题吗?
谢谢!
平台:Linux,bash
将我的项目从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
我有一个基于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
我发现这段使用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++ 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)
如果我为一个向量保留了一些空间,然后我用它复制了一些值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++
我无法通过 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配置有什么问题?
在 Boost 网站上,我没有发现有关 boost::any 使用或 RTTI 的信息。
我在几个地方读到这是一个要求,但后来我构建了一个简单的测试项目,它在有和没有 RTTI 的情况下构建。
那么,存在性能和内存问题的 RTTI 是否需要 boost::any 和类似的类?
如何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.txt为test0.txt,我会从脚本中收到一条错误消息。
因此该脚本行为正确,但该命令在文件系统上没有留下任何痕迹。
是run_command从 Meson 运行 shell 命令的唯一方法吗?我究竟做错了什么?
参考: https: //mesonbuild.com/External-commands.html
c++ ×7
meson-build ×3
c++11 ×2
boost ×1
boost-any ×1
build ×1
clang ×1
clang++ ×1
cmake ×1
command ×1
constructor ×1
copy ×1
directory ×1
doxygen ×1
file-copying ×1
gcc ×1
git ×1
git-branch ×1
memset ×1
mingw ×1
performance ×1
qt ×1
qt-creator ×1
qt5 ×1
qtgui ×1
rtti ×1
shell ×1
stdvector ×1
templates ×1