当我跑来make -j3并行构建时,我明白了
warning: -jN forced in submake: disabling jobserver mode.
Run Code Online (Sandbox Code Playgroud)
在文档中我发现了警告
如果make检测到子系统可以通信的系统上与并行处理相关的错误条件.
这些错误情况是什么?我该怎么做才能治愈它们或抑制错误信息?
makefile是从CMake生成的,所以我不能(=我不想)编辑makefile.
在GCC中,我可以使用链接器标志-Wl,--start-group并-Wl,--end-group解决与具有循环依赖关系的库的链接问题.我想对clang做同样的事情,但似乎这个功能在lld 3.2版本中被删除了.我该怎么做?
在检查CMake源之后,我成功配置并构建了CMake.但是我如何构建CMake的文档?我安装了Sphinx.
没有目标make doc,我不得不调用哪个Sphinx命令.我没有在CMake Wiki或他们的邮件列表档案中找到任何提示.
我正在研究 SFML,我很好奇我可以自己编译它的选项。我在教程中找到了它,但从第一行开始我就感到困惑:
CMake 是一个开源元构建系统。它不是构建 SFML,而是构建构建 SFML 的内容:Visual Studio 解决方案...
Visual Studio 中也有一个构建选项,该构建和 CMake 构建之间有什么区别吗?
它构建了构建 SFML 的内容,这意味着什么?是指库文件吗?
视觉工作室解决方案?这是什么意思?据我所知,当我打开一个新项目时,它位于一个解决方案中,我可以向该解决方案添加新项目(我很困惑为什么解决方案中也必须有多个项目!)。
CMake 构建解决方案意味着什么?它是做什么用的?
我愿意在Qt Quick Controls 2和C ++中的CMake项目中使用样式。而且我很难使颜色正确。
C ++,qml和样式代码来自qt博客,并且只要我使用.pro项目文件,它就可以正常工作,但是当我转向CMakeLists.txt时,我无法正确设置颜色(我相信它们是默认的颜色深色/紫色,而不是深色/橙色)。
在.pro项目中,我的main.cpp如下所示:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQuickStyle>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQuickStyle::setStyle("Material");
QQmlApplicationEngine engine;
engine.load(QUrl(QLatin1String("qrc:/main.qml")));
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
我的qml.qrc文件看起来像这样:
<!DOCTYPE RCC>
<RCC>
<qresource prefix="/">
<file>main.qml</file>
<file>CustomLabel.qml</file>
<file>PageBackground.qml</file>
<file>SideBar.qml</file>
<file>SideBarForm.ui.qml</file>
<file>Light.qml</file>
<file>LightForm.ui.qml</file>
<file>Heating.qml</file>
<file>HeatingForm.ui.qml</file>
<file>Security.qml</file>
<file>SecurityForm.ui.qml</file>
<file>qtquickcontrols2.conf</file>
</qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)
和我的qtquickcontrols2.conf文件是这样的:
[Controls]
Style=Material
[Universal]
Theme=Dark
Accent=DeepOrange
[Material]
Theme=Dark
Accent=DeepOrange
Run Code Online (Sandbox Code Playgroud)
现在,我的CMake项目文件夹包含完全相同的文件(实际上是.pro项目文件夹的副本和粘贴),除了我删除了.pri和.pro文件,现在它包含一个CMakeLists.txt …
CMake 生成的 make 文件具有彩色输出,以提高可读性。
是否可以更改颜色?我有一个绿色的终端字体,所以我有点松散指示对象已构建的消息的颜色。
配置 CMake 项目时,我不断遇到此问题:
example/CMakeLists.txt:74 (ADD_EXECUTABLE) 处的 CMake 警告 (dev):
未设置策略 CMP0063:尊重所有目标类型的可见性属性。运行“cmake --help-policy CMP0063”以获取策略详细信息。使用 cmake_policy 命令设置策略并抑制此警告。
“EXECUTABLE”类型的目标“Protonect”为 CXX 设置了以下可见性属性:Run Code Online (Sandbox Code Playgroud)CXX_VISIBILITY_PRESET VISIBILITY_INLINES_HIDDEN为了兼容性,CMake 不会为此目标尊重它们。此警告是针对项目开发人员的。使用 -Wno-dev 来抑制它。
我知道我想打电话cmake_policy(SET CMP0063 NEW)- 我正在这样做,但我不确定我应该如何使用add_executable(Protonect).
我安装了多个版本的OpenCV,而CMake找到了错误的版本。我已经使用brew安装了opencv和opencv3,它们存在于以下路径中:
/usr/local/opt/opencv3
/usr/local/opt/opencv
Run Code Online (Sandbox Code Playgroud)
我的CMakeLists.txt如下所示:
cmake_minimum_required(VERSION 2.8)
set(ENV{OpenCV_DIR} "/usr/local/opt/opencv3")
project(TestProject)
#OpenCV
find_package( OpenCV 3 REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
MESSAGE ( STATUS "Found OpenCV: ${OpenCV_VERSION}" )
MESSAGE ( STATUS "OpenCV_INCLUDE_DIRS= ${OpenCV_INCLUDE_DIRS}" )
MESSAGE ( STATUS "OpenCV_DIR= $ENV{OpenCV_DIR}" )
Run Code Online (Sandbox Code Playgroud)
我正在使用OpenCV_DIR指向我要使用的OpenCV的位置(在本示例中,它是在100%确定此变量指向正确位置之前立即设置的)。
我的输出是这样的:
-- Found OpenCV: 3.0.0
-- OpenCV_INCLUDE_DIRS= /usr/local/include/opencv
-- OpenCV_DIR= /usr/local/opt/opencv3
Run Code Online (Sandbox Code Playgroud)
因此,它正在查找正确版本的OpenCV(3.0.0),但是include路径设置为其他一些opencv,在这种情况下,/ usr / local / include / opencv指向/ usr / local / opt / opencv,即2.4.8版本。
结果,我的程序都找不到适合的文件!如果OpenCV_DIR环境变量似乎不起作用,是否有人知道如何告诉CMake寻找哪个版本?
我有几个版本的项目结帐和编译。如果我发现错误,我会比较版本以缩小问题范围。有时我会启用像 AddressSanitizer 这样的消毒剂。如果我重新使用一个可执行文件,我不记得它是否是用消毒剂编译的。如果可执行文件工作正常,我不确定该错误是否不存在,或者我是否没有在此版本中包含消毒剂。所以我必须重新配置和重建以确保我有消毒剂。
有没有办法检查可执行文件是否已使用消毒剂编译?
从一些其他具有构建单个文件选项的IDE切换的大多数人都对CLion感到有点困惑,而CLion似乎没有选择.
那么如何避免将每个源文件的每个名称都添加到CMake中?