尝试在 Windows 7 中构建nanomsg 项目时出现错误:
cmake ..
-- Building for: NMake Makefiles
-- The C compiler identification is GNU 4.7.1
-- Check for working C compiler: C:/Program Files (x86)/CodeBlocks/MinGW/bin/gcc.exe
CMake Error: Generator: execution of make failed. Make command was: "nmake" "/NOLOGO" "cmTC_5d837\fast"
-- Check for working C compiler: C:/Program Files (x86)/CodeBlocks/MinGW/bin/gcc.exe -- broken
CMake Error at C:/Program Files (x86)/cmake-3.9.4-win64-x64/share/cmake-3.9/Modules/CMakeTestCCompiler.cmake:51 (message):
The C compiler "C:/Program Files (x86)/CodeBlocks/MinGW/bin/gcc.exe" is not
able to compile a simple test program.
It fails with …Run Code Online (Sandbox Code Playgroud) 我想使用IAR编译器.我注意到CMake已经有一堆关于这个编译器的文件:
https://github.com/jevinskie/cmake/blob/master/Modules/Compiler/IAR.cmake
从我读到的常见解决方案是手动指定我的所有工具链CMakeLists.txt:
set(CMAKE_C_COMPILER iccarm)
set(CMAKE_CPP_COMPILER iccarm)
Run Code Online (Sandbox Code Playgroud)
CMake如何将这些定义与`Modules/Compiler/IAR.cmake"联系起来?
我以为我只需要这样做
include("Modules/Compiler/IAR.cmake")
Run Code Online (Sandbox Code Playgroud)
指定IAR编译器的正确方法是什么?
当我做
cmake .
Run Code Online (Sandbox Code Playgroud)
它仍然试图使用gcc而不是我的IAR编译器.为什么?
我正在尝试交叉编译嵌入式ARM Cortex构建的项目,但我无法使链接器正常工作.我想使用armlink,但没有文件传递给armlink,因此没有生成.elf文件.
我的CMakeLists.txt非常简单,如下所示.之后显示失败,表明makefile在没有任何参数的情况下调用了armlink.
任何指针都会有所帮助 - 我搜索并阅读了很多帖子,但他们似乎都有更多的参与要求.
cmake_minimum_required(VERSION 2.8)
project(test_arm)
enable_language(C ASM)
# Cross-compilation for ARM
SET(CMAKE_C_COMPILER armcc)
SET(CMAKE_LINKER armlink)
SET(CMAKE_C_LINK_EXECUTABLE armlink)
SET(CMAKE_C_FLAGS "--cpu=Cortex-M3")
SET(LINK_FLAGS "--map --ro-base=0x0 --rw-base=0x0008000 --first='boot.o(RESET)' --datacompressor=off")
SET(CMAKE_EXE_LINKER_FLAGS "--map --ro-base=0x0 --rw-base=0x0008000 --first='boot.o(RESET)' --datacompressor=off")
include_directories(../include)
add_executable(blinky blinky.c)
set_target_properties(blinky PROPERTIES LINKER_LANGUAGE C)
Run Code Online (Sandbox Code Playgroud)
失败如下,但我想对于我的CMakeLists中有一些愚蠢问题的人来说很明显:
$ make VERBOSE=1
[100%] Building C object CMakeFiles/blinky.dir/blinky.c.o
/usr/bin/cmake -E cmake_link_script CMakeFiles/blinky.dir/link.txt --verbose=1
armlink
Linking C executable blinky
Product: DS-5 Professional 5.21.0 [5210017]
Component: ARM Compiler 5.05 update 1 (build 106)
Tool: armlink [4d0efa]
For support see …Run Code Online (Sandbox Code Playgroud) 构建说明使用CMake。我不是CMake的专家。我所在的Windows系统具有:
我已经尝试了CMake变量/选项的所有方法和替代方法:
-DCMAKE_C_COMPILER=... \
-DCMAKE_CXX_COMPILER=... \
-DCMAKE_Fortran_COMPILER=... \
-DCMAKE_MAKE_PROGRAM=... \
-G ...
Run Code Online (Sandbox Code Playgroud)
获得使用MinGW构建ECCODES的机会,但是没有运气。我知道有人会问:“为什么不联系ECMWF?” 简短的答案是,响应时间非常长(月/年)。FAQ页面为空,您不能在其Jira网站(已锁定)上发布问题。
熟悉CMake和MinGW的人是否可以下载.tar.gz,使用MinGW构建ECCODE并告诉我们您如何做?
https://software.ecmwf.int/wiki/display/ECC/ecCodes+Home
https://software.ecmwf.int/wiki/download/attachments/45757960/eccodes-0.13.0-Source.tar.gz?api=v2
我想调查一下为什么会出现这个错误:
$ cmake ..
-- The C compiler identification is unknown
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /cygdrive/c/Users/Ycr/Home/bin/arm-none-eabi-gcc
-- Check for working C compiler: /cygdrive/c/Users/Ycr/Home/bin/arm-none-eabi-gcc -- broken
CMake Error at /usr/share/cmake-3.6.2/Modules/CMakeTestCCompiler.cmake:61 (message):
The C compiler "/cygdrive/c/Users/Ycr/Home/bin/arm-none-eabi-gcc" is not
able to compile a simple test program.
Run Code Online (Sandbox Code Playgroud)
不幸的是,错误发生后:
CMakeFiles/cmTC_e4aa4.dir被清理,因此我无法自己探索该问题。我应该如何调查这样的错误?
我尝试使用该--debug-trycompile选项。这次 CMake 创建了一个CMakeTmp文件夹,完美无误。但是,我仍然有这个CMakeFiles/cmTC_e4aa4.dir生成错误,甚至使用 CMake 选项取消文件夹链接。
我有一个简单的项目,其中文件结构如下所示:
- CMakeLists.txt
- main.cpp
Run Code Online (Sandbox Code Playgroud)
看起来CMakeLists.txt像这样:
# Project initialization
cmake_minimum_required (VERSION 2.6)
project (Tutorial)
add_executable(Tutorial main.cpp)
Run Code Online (Sandbox Code Playgroud)
当我运行 Cmake GUI 时,我得到:
CMake Error at CMakeLists.txt:3 (project):
No CMAKE_CXX_COMPILER could be found.
Run Code Online (Sandbox Code Playgroud)
我安装了 Microsoft Visual Studio 2017。我已经编译并运行了它的应用程序。CMAKE 教程中的基本示例不起作用。
谁能告诉我为什么?
我在C ++ 14项目中使用CMake 3.8.2,GNU make 4.2.1和GCC 6.4.0,在构建时我注意到了一个奇怪的行为。我使用CMake在名为“ build”的子文件夹中进行源代码外构建,cmake ..然后运行make。
CMake运行良好,没有任何错误,make会像我期望的那样构建所有源文件,直到完成编译并开始链接它们为止。然后它将失败并显示错误
[ 83%] ...
[100%] Linking CXX executable myproject
/usr/bin/ld: some-source-file.cc.o: undefined reference to symbol '_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.21'
Run Code Online (Sandbox Code Playgroud)
有趣的是,到目前为止,它不显示任何编译器警告,而仅显示上述链接器错误。
现在,当我忽略该错误并简单地运行cmake ..,然后make再次运行(就像我之前所做的那样)时,即使我没有更改任何代码或与CMake相关的文件,我也会得到我的代码应产生的所有编译器警告,并且所有链接都可以正常运行同时。
我可以build通过运行删除目录中的所有文件来重现此行为rm -r *。
这是我的CMakeLists.txt文件:
# Define minimum required CMake version
cmake_minimum_required(VERSION 3.8.2)
# Setting compiler related settings
set(CMAKE_CXX_COMPILER "${CMAKE_SOURCE_DIR}/toolchain/binary/gcc-6.4.0/bin/gcc")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wconversion -O2 -lstdc++")
set(CMAKE_CXX_STANDARD 14)
# Define project name
project(MyProject)
# Find source files
file(GLOB_RECURSE …Run Code Online (Sandbox Code Playgroud) 出于某种原因,CMake的C和C++编译器默认设置为/usr/bin/qcc.我已经按照这篇文章尝试了这个命令
cmake -D CMAKE_C_COMPILER =/usr/bin/gcc -D CMAKE_CXX_COMPILER =/usr/bin/g ++
但我得到了错误
CMake错误:源目录[当前目录]/CMAKE_CXX_COMPILER =/usr/bin/g ++"不存在.
为什么CMake将我的命令解释为目录,设置CMake编译器的正确方法是什么?
我正在尝试一个 hello world 测试来在 Windows 下制作 cmake,使用 MinGW 作为编译器。
此答案建议cmake使用以下-G标志运行:
cmake -G "MinGW Makefiles" .
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做,我会收到一条消息,说那不是已知的生成器。实际上,运行cmake --help,在Generators部分下列出了以下生成器:
如您所见,未列出“MinGW Makefiles”。
如果这是相关的,我已经安装了 MinGW 并在我的系统上的常用文件夹中工作C:\MinGW。我还通过 WinBuilds 和 MSYS2 安装了 MinGW-w64,同样在默认安装文件夹中。我正在使用cmake version 3.5.2,通过 MSYS2 安装。
为什么“MinGW Makefiles”没有在生成器中列出?
我编写了一个cmake文件,该文件构建了两个共享库vector3.c和matrix4.c。matrix4依赖于vector3,如果我运行cmake项目并仅构建vector3共享库,则当我添加matrix4库我收到一个cmake错误。没有规则可以成为目标。
文件夹结构
core_math
------CMakeLists.txt
-common/
------common_structs.h
-matrix4/
------CMakeLists.txt
------matrix4/src/matrix4_scalar.c
------matrix4/headers/matrix4_scalar.h
-vector3/
-------CMakeLists.txt
-------vector3/src/vector3_scalar.c
-------vector3/headers/vector3_scalar.h
Run Code Online (Sandbox Code Playgroud)
core_math / CMakeLists.txt
PROJECT(core_math)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
ADD_SUBDIRECTORY(vector3_scalar)
ADD_SUBDIRECTORY(matrix4_scalar)
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY $(CMAKE_BINARY_DIR)/static_lib)
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY $(CMAKE_BINARY_DIR)/shared_lib)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY $(CMAKE_BINARY_DIR)/bin)
SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)
Run Code Online (Sandbox Code Playgroud)
core_math / vector3 / CMakeLists.txt
PROJECT(vector3_scalar)
SET(CMAKE_MACOSX_RPATH 1)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../common)
SET(HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/../common/common_structs.h)
SET(SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/vector3_scalar.c ${HEADER_FILES})
ADD_LIBRARY(vector3_scalar SHARED ${SRC_FILES})
Run Code Online (Sandbox Code Playgroud)
core_math / matrix4_scalar / CMakeLists.txt
PROJECT(matrix4_scalar)
SET(CMAKE_MACOSX_RPATH 1)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../common
${CMAKE_CURRENT_SOURCE_DIR}/../vector3_scalar)
SET(HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/../common/common_structs.h
${CMAKE_CURRENT_SOURCE_DIR}/../vector3_scalar/headers/vector3_scalar.h
${CMAKE_CURRENT_SOURCE_DIR}/headers/matrix4_scalar.h)
SET(SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/matrix4_scalar.c ${HEADER_FILES})
ADD_LIBRARY(matrix4_scalar SHARED ${SRC_FILES})
TARGET_LINK_LIBRARIES(matrix4_scalar vector3_scalar)
Run Code Online (Sandbox Code Playgroud)
建立错误
-- Build files have been written to: /Users/blubee/MATH/project/build
Scanning dependencies …Run Code Online (Sandbox Code Playgroud)