标签: ninja

在Windows上使用CMake,Ninja和Clang构建

亲爱的C++编程员,

在使用Visual Studio工具链在Windows上构建一段时间后,我决定给Clang 5一个镜头.

我安装了LLVM 5.0.0二进制文件,Ninja构建环境,VS 2017工具和CMake 3.9.3.最终目标是能够使用VS Code编译C和C++应用程序,将CMake集成为"IDE",将Clang与LLD一起编译为编译器和链接器.

一个简单程序的编译和执行工作得非常好(相应终端历史的屏幕截图).Clang在VS Tools目录中自动检测到Windows的标准lib,并生成了可执行输出.

下一步是使用Ninja建立一个简单的构建(ninja.build文件和终端历史的截图).构建过程按预期工作,并像以前一样生成可运行的可执行文件.

当我开始将CMake集成到流程中时,问题就开始了.我的期望是CMake生成一个ninja构建文件并运行它,对吗?我尝试了以下CMakeLists文件

cmake_minimum_required(VERSION 3.9)

project(Test)

add_executable(Test main.c)
Run Code Online (Sandbox Code Playgroud)

并称为CMake cmake -G Ninja.由此产生的结果是令人失望的,我不明白,分别自己解决问题.

-- The C compiler identification is Clang 5.0.0
-- The CXX compiler identification is Clang 5.0.0
-- Check for working C compiler: C:/Meine_Programme/LLVM/bin/clang.exe
-- Check for working C compiler: C:/Meine_Programme/LLVM/bin/clang.exe -- broken
CMake Error at C:/Meine_Programme/CMake/share/cmake-3.9/Modules/CMakeTestCCompiler.cmake:51 (message):
  The C compiler "C:/Meine_Programme/LLVM/bin/clang.exe" is not able to
  compile a simple test program.

  It fails with …
Run Code Online (Sandbox Code Playgroud)

windows cmake clang ninja

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

Windows上的CMake -G Ninja指定x64

我正在使用带有Ninja生成器的Windows上的CMake

cmake -G Ninja ..
Run Code Online (Sandbox Code Playgroud)

这使用默认的Windows x86工具链.如何使用Ninja生成器指定x64?

PS:我知道如何使用Visual Studio生成x64

cmake -G "Visual Studio 12 2013 Win64 ..
Run Code Online (Sandbox Code Playgroud)

windows 64-bit x86-64 cmake ninja

17
推荐指数
3
解决办法
2万
查看次数

使用CMake,Clang和Ninja在Windows上构建c ++项目

我目前在Windows上安装了cmake,clang和ninja.我正在尝试使用CMake生成一个忍者构建文件来编译一个非常简单的hello world程序.

我的CMakeLists.txt看起来像这样:

cmake_minimum_required(VERSION 2.8)
project(test_project)
add_executable(main main.cpp)
Run Code Online (Sandbox Code Playgroud)

main.cpp 是一个简单的hello world程序.

在命令行上我运行这个:cmake -G Ninja ..我得到以下错误:

-- The C compiler identification is Clang 3.5.0
clang.exe: error: no such file or directory: '/nologo'
clang.exe: error: no such file or directory: '/showIncludes'
-- The CXX compiler identification is Clang 3.5.0
clang.exe: error: no such file or directory: '/nologo'
clang.exe: error: no such file or directory: '/showIncludes'
-- Check for working C compiler using: Ninja
-- Check for working C compiler using: …
Run Code Online (Sandbox Code Playgroud)

c++ windows build clang ninja

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

额外详细的 ninja 调试输出

我的ninja构建似乎陷入了特定命令,但是如果我手动运行该命令,它会快速完成,没有任何问题。

有没有办法输出ninja更多的调试信息,这样ninja -v我就可以找出它挂起的原因?

ninja

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

使用cmake从复杂项目中仅安装一个目标(及其依赖项)(打开更好的解决方案)

假设我有一个由几个子项目A,B,C,D组成的项目 ...... 所有子项目都依赖于A,它经常变化.此外,可能有一些进一步的依赖关系:在这个例子中,d依赖于B.

现在:很多人正在研究这些项目.主CMakeLists.txt文件应包含所有目录,以便构建all构建所有目录.但人们也希望能够只在其中一个项目上工作,而不必每次都构建/安装所有项目.

如果我正在研究D,我可以通过调用轻松构建"仅"D

cmake --build . --target D -- -j7
Run Code Online (Sandbox Code Playgroud)

要么

ninja -j7 D
Run Code Online (Sandbox Code Playgroud)

如果他们的某些东西发生了变化,这也将构建A和B. 完善.

但是如何在不触发构建全部的情况下仅为D调用安装?如果我打电话,我想这样:

ninja -j7 D install
Run Code Online (Sandbox Code Playgroud)

它只构建D(和依赖项),然后只安装D 及其依赖项(A和B). 相反,它构建目标all并安装所有.

我想保持目标所有人都在继续建设.所以EXCLUDE_FROM_ALL不是一个选项.但是朝那个方向走,我找不到任何解决办法.

所以我在考虑以下策略:

  • 除子项目A外,所有其他目标都设置为EXCLUDE_FROM_ALL,安装时可选.
  • 我添加了一个额外的子项目,它只是依赖于所有其他子项目(也许我通过使用PARENT_SCOPE中设置的一些变量使每个目标发布其名称),人们将不得不在他们想要构建和安装所有内容时调用它.

它会起作用吗?有没有更好的解决方案?

我们希望避免每个人都必须编辑主CMakeLists.txt文件以排除他不感兴趣的项目.解决方案应该可以移植到不同的操作系统.

编辑:

我尝试了我提出的策略,但它不起作用:在我的情况下,为目标设置一个install语句(即使指定为OPTIONAL)也会使EXCLUDE_FROM_ALL无效.在文档中更好地阅读我发现:

Installing a target with EXCLUDE_FROM_ALL set to true has undefined behavior.
Run Code Online (Sandbox Code Playgroud)

我也收到这个警告:

Target <targetname> has EXCLUDE_FROM_ALL set and will not be built by default but an install rule has been provided for it.  CMake does not define behavior for this …
Run Code Online (Sandbox Code Playgroud)

cmake ninja

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

Ninja 需要加载 C++ 扩展

我下载了一个程序并想运行它。它来自github

我进入experiments/segmentation/文件夹,然后在终端输入“python test.py --dataset PContext --model-zoo Encnet_ResNet50_PContext --eval”。

终端显示“RuntimeError: Ninja is required to load C++ extensions.”上网查了一晚上也没发现这样的问题。

有谁能够帮助我?我是第一次来这里提问

python ninja

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

直接调用 ninja 与通过 cmake --build 调用之间的区别

请遵循以下命令:

首先我这样做:

cmake -G Ninja ..
Run Code Online (Sandbox Code Playgroud)

然后:

cmake --build . -j10
Run Code Online (Sandbox Code Playgroud)

或者:

ninja -j10
Run Code Online (Sandbox Code Playgroud)

它们之间有什么区别?它们之间有优点还是缺点吗?

cmake ninja

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

尝试编译Chromium时出错

我尝试使用该命令ninja -C out/Debug chrome编译Chromium.

但错误消息msg说:

ninja error loading 'build.ninja': the system cannot find the file specified 
ninja Entering dictory 'out/Debug'
Run Code Online (Sandbox Code Playgroud)

我能知道这是什么问题吗?

谢谢.

chromium ninja

11
推荐指数
1
解决办法
4842
查看次数

如何使用 CMake 自定义 Ninja 日志输出?(可能的?)

当我使用Makefile进行编译时,构建日志是丰富多彩且详细的。但是当我使用Ninja时,我只得到一行有进度的信息,没有百分比和颜色。如何使Ninja构建日志看起来像Makefile的日志?这是否可能,或者必须需要Ninja开发人员采取行动?

例子:

生成文件日志:

忍者日志:

PS欢迎任何方法,将在本地使用。

PPS如果没有人,就说目前这是不可能的。

c++ makefile cmake ninja

11
推荐指数
1
解决办法
1680
查看次数

在 Ninja 中使用 ExternalProject 下载步骤

这似乎是一个没有明确答案的常见问题。

情况是:我们有一个第 3 方依赖项,我们希望在构建依赖它的目标时在构建时安装它。大致是这样:

ExternalProject_Add(target-ep
    DOWNLOAD_COMMAND <whatever>
    BUILD_COMMAND ""
    INSTALL_COMMAND ""
    CONFIGURE_COMMAND "")

add_library(target-imp STATIC IMPORTED)
set_target_properties(target-imp PROPERTIES
    INTERFACE_INCLUDE_DIRECTORIES /path/to/install/include
    IMPORTED_LOCATION /path/to/install/lib/libwhatever.a)

add_library(target INTERFACE)
target_link_libraries(target INTERFACE target-imp)
add_dependencies(target target-ep)
Run Code Online (Sandbox Code Playgroud)

(由于cmake 问题 15052 ,这里需要三个探戈)

当使用 Unix Makefiles 作为生成器时,这很好用。仅按需安装依赖项,所有构建都能正常工作。

但是,在 Ninja 上,这会立即失败,如下所示:

ninja: error: '/path/to/install/lib/libwhatever.a', needed by 'something', missing and no known rule to make it
Run Code Online (Sandbox Code Playgroud)

这是因为 Ninja 扫描依赖项的方式与 Make 不同(请参阅ninja issue 760)。所以我们要做的其实就是告诉 Ninja 这个外部依赖是存在的。我们能做到这一点:

ExternalProject_Add(target-ep
    DOWNLOAD_COMMAND <whatever>
    BUILD_BYPRODUCTS /path/to/install/lib/libwhatever.a
    BUILD_COMMAND ""
    INSTALL_COMMAND "" …
Run Code Online (Sandbox Code Playgroud)

cmake ninja

10
推荐指数
2
解决办法
1732
查看次数

标签 统计

ninja ×10

cmake ×6

windows ×3

c++ ×2

clang ×2

64-bit ×1

build ×1

chromium ×1

makefile ×1

python ×1

x86-64 ×1