相关疑难解决方法(0)

传递编译器选项cmake

我知道如何使用cmake命令传递编译器选项

set(CMAKE_CXX_FLAGS "-Wall -Wno-dev -Wl,-rpath=/home/abcd/libs/")
Run Code Online (Sandbox Code Playgroud)

是否还有任何方法可以从命令行传递选项,这将覆盖CMakeList.txt选项,类似于 -

cmake -Wl,-rpath=/home/abcd/newlibs/ path/to/CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

要么

cmake -D CMAKE_CXX_FLAGS="-Wno-dev -Wl,-rpath=/home/abcd/libs/" path/to/CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

我的主要问题是我想知道如何追加标志以及如何从命令行覆盖现有的编译器标志.

cmake

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

如何告诉CMake在Windows上使用Clang?

我有一个使用CMake构建的C++项目.我通常在OSX上构建,但现在我正在尝试使用Windows版本.出于兼容性原因,我想在Windows上使用Clang.

我从LLVM安装了预编译的Clang 3.8二进制文件:

C:\Program Files\LLVM\bin\clang.exe
C:\Program Files\LLVM\bin\clang++.exe
Run Code Online (Sandbox Code Playgroud)

它也安装在我的PATH上:

>clang++
clang++.exe: error: no input files
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. clang++我打电话时如何告诉CMake使用cmake --build?
  2. 如何在构建CMake配置的编译器之前检查?

c++ windows build cmake clang

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

Configure CMake in windows to use clang from command line to get modern OpenMP support

I have a small test project that uses OpenMP for parallelization. My target is to compile it so it produces .dll and .lib for libraries (because my real project links to external libraries distributed using these types), with support for OpenMP 4.5 or newer and do it from the command line so it can be done on a docker for testing and checking (the docker part is out of the scope of this question, it is just for reference on …

c++ dll cmake clang visual-studio

9
推荐指数
1
解决办法
270
查看次数

使用 Ninja Generator 为 Windows (clang-cl) 构建的 CMake

我正在尝试使用 CMake 作为主要构建工具在 Windows 机器上构建一个简单的应用程序。一旦在项目上调用 CMake,配置阶段就会出现错误:

> cmake -H. -G Ninja -Bbuild -DCMAKE_C_COMPILER:PATH="C:\Program Files\LLVM\bin\clang-cl.exe" -DCMAKE_CXX_COMPILER:PATH="C:\Program Files\LLVM\bin\clang-cl.exe"

-- The C compiler identification is Clang 7.0.0
-- The CXX compiler identification is Clang 7.0.0
-- Check for working C compiler: C:/Program Files/LLVM/bin/clang-cl.exe
-- Check for working C compiler: C:/Program Files/LLVM/bin/clang-cl.exe --broken
CMake Error at C:/Program Files/CMake/share/cmake-3.12/Modules/CMakeTestCCompile
r.cmake:52 (message):
  The C compiler

    "C:/Program Files/LLVM/bin/clang-cl.exe"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: C:/Users/mak/Desktop/cmake-test/build/CMakeFiles/CMakeTmp

    Run …
Run Code Online (Sandbox Code Playgroud)

cmake ninja clang-cl

7
推荐指数
1
解决办法
4681
查看次数

在 x64 Windows 上使用 CMake、Ninja 和 Clang 构建 x86 应用程序

我想在我的 x64 Windows 计算机上构建 x86 Windows 应用程序。

\n\n

我使用 CMake、Ninja、clang-cl、lld-link 和 VS Build Tools 2017 以及以下 CMakeLists

\n\n
cmake_minimum_required(VERSION 3.9)\nproject(Test CXX)\n\nadd_library(TestLib STATIC "")\ntarget_include_directories(TestLib\n  PUBLIC\nTestLib/inc\n)\ntarget_sources(TestLib\n  PRIVATE\n    TestLib/src/Flop.cpp\n    TestLib/src/testClass.cpp\n)\n\nadd_executable(Test "")\ntarget_sources(Test\n  PRIVATE\n    src/main.cpp\n)\ntarget_link_libraries(Test\n  TestLib\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的设置适用于 x64 应用程序。我初始化构建环境并vcvars64调用 cmake

\n\n
cmake -G Ninja -DCMAKE_CXX_COMPILER:PATH="C:\\MeineProgramme\\LLVM\\bin\\clang-cl.exe" -DCMAKE_LINKER:PATH="C:\\MeineProgramme\\LLVM\\bin\\lld-link.exe"\n
Run Code Online (Sandbox Code Playgroud)\n\n

这会产生完美的忍者构建文件并生成功能性可执行文件。

\n\n

如果我想构建 x86 应用程序,CMake 无法检测构建环境。vcvars32我使用或初始化构建环境,vcvarsamd64_x86并使用与上面相同的命令来调用 CMake。这会导致在检测构建环境期间出现错误。

\n\n

CMake错误日志有以下内容

\n\n
Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" failed.\nCompiler: C:/MeineProgramme/LLVM/bin/clang-cl.exe \nBuild flags: \nId flags:  \n\nThe output was:\n1120\nLINK : error LNK2001: Nicht …
Run Code Online (Sandbox Code Playgroud)

architecture windows cmake clang ninja

6
推荐指数
1
解决办法
7597
查看次数

如何部分禁用 cmake C/C++ 自定义编译器检查

我正在尝试使用 cmake 进行一些交叉编译。有些很容易使用互联网上的所有示例,我设法在 Linux(x86 和 ARM)、Windows 和 Android 上交叉编译我的库。但现在我想在自定义平台上进行。

我需要实现的流程:

  1. 获取我的环境(这会破坏所有以前的 bash 经典环境)
  2. 使用cmake编译
  3. 执行我想要的

但 Cmake 正在测试我的自定义 C/C++ 库中的符号,这使得我的库无法编译。我遇到的错误是 cmake 某些版本的 GLIBCXX 和 CXXABI (没有 C 问题),但不是全部。

有没有办法让 cmake 可以接受它?

编辑:

我尝试使用:

set(CMAKE_C_COMPILER_WORKS TRUE)
set(CMAKE_CXX_COMPILER_WORKS TRUE)
Run Code Online (Sandbox Code Playgroud)

与:

include(CMakeForceCompiler)
...
cmake_force_c_compiler(${ENV_PATH}/bin/${CC})
cmake_force_cxx_compiler(${ENV_PATH}/bin/${CXX})
Run Code Online (Sandbox Code Playgroud)

但 cmake 仍在检查符号。

c c++ compilation cmake

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

CMake用于检测Ninja的Visual C++编译器工具的环境变量

我有PATHVisual Studio 2017 RTM中的Mingw64 GCC 6.3.0(总是在)和Visual C++编译工具(不在PATH).

如果我运行cmake . -G "MinGW Makefiles",将选择GCC 6.3.0.

如果我运行cmake . -G "Ninja",将选择GCC 6.3.0.

我的Visual C++编译工具不是标准的,我只保留我需要的部分并删除其余部分(如MSBuild,IDE等).我使用自己的批处理脚本来设置PATH,INCLUDE并且LIB(工作得很好).

如果我运行此批处理脚本并运行cmake .,将选择MSVC并使用NMake构建.

在相同的环境下,cmake . -G "Ninja"选择GCC 6.3.0而不是MSVC.

所以我的问题是,如何告诉CMake我想要使用MSVC + Ninja而不是GCC + Ninja PATH?我应该设置的任何环境变量?

cmake ninja

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

标签 统计

cmake ×7

c++ ×3

clang ×3

ninja ×3

windows ×2

architecture ×1

build ×1

c ×1

clang-cl ×1

compilation ×1

dll ×1

visual-studio ×1