我知道如何使用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构建的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)
我有两个问题:
clang++我打电话时如何告诉CMake使用cmake --build?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 …
我正在尝试使用 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) 我想在我的 x64 Windows 计算机上构建 x86 Windows 应用程序。
\n\n我使用 CMake、Ninja、clang-cl、lld-link 和 VS Build Tools 2017 以及以下 CMakeLists
\n\ncmake_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)\nRun Code Online (Sandbox Code Playgroud)\n\n我的设置适用于 x64 应用程序。我初始化构建环境并vcvars64调用 cmake
cmake -G Ninja -DCMAKE_CXX_COMPILER:PATH="C:\\MeineProgramme\\LLVM\\bin\\clang-cl.exe" -DCMAKE_LINKER:PATH="C:\\MeineProgramme\\LLVM\\bin\\lld-link.exe"\nRun Code Online (Sandbox Code Playgroud)\n\n这会产生完美的忍者构建文件并生成功能性可执行文件。
\n\n如果我想构建 x86 应用程序,CMake 无法检测构建环境。vcvars32我使用或初始化构建环境,vcvarsamd64_x86并使用与上面相同的命令来调用 CMake。这会导致在检测构建环境期间出现错误。
CMake错误日志有以下内容
\n\nCompiling 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) 我正在尝试使用 cmake 进行一些交叉编译。有些很容易使用互联网上的所有示例,我设法在 Linux(x86 和 ARM)、Windows 和 Android 上交叉编译我的库。但现在我想在自定义平台上进行。
我需要实现的流程:
但 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 仍在检查符号。
我有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?我应该设置的任何环境变量?