亲爱的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) 我想在我的 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) 我目前正在大学实时编程语言课程中学习 Ada,并且有一个关于 SPARK 的问题。
我正在开发一个项目,其任务是监视离网电源。这项任务对于机器安全至关重要,因此应该尽可能没有错误,经过 SPARK 验证。
我收到这个奇怪的错误,我无法找到修复方法11:14 tasking in SPARK requires sequential elaboration (SPARK RM 9(2)) violation of pragma SPARK_Mode
原始代码有点长,但我能够通过一个最小的示例得到相同的错误。
规格:
pragma Profile (Ravenscar);
pragma SPARK_Mode;
with System;
package simple_monitoring is
function sign (val : in Float) return Float
with Pre => val >= 10.0;
task type myTask is
end myTask;
end simple_monitoring;
Run Code Online (Sandbox Code Playgroud)
实施:
pragma Profile (Ravenscar);
pragma SPARK_Mode;
with Ada.Real_Time; use Ada.Real_Time;
with Ada.Text_IO; use Ada.Text_IO;
package body simple_monitoring is
function sign (val : in Float) …Run Code Online (Sandbox Code Playgroud) 我目前正在大学的实时编程语言课程中学习Ada,并对泛型有疑问.
我有一个通用的程序 csv_put
package PSU_Logging is
type logged_signal_names_t is (
t,
U_V1,
I_L1,
U_C1,
I_L2,
U_C2,
I_Load
);
private
... Some types, tasks and subprogramms ...
generic
type Item_Type_t is private;
procedure csv_put (File : in File_Type; Item : in Item_Type_t);
end PSU_Logging;
Run Code Online (Sandbox Code Playgroud)
与定义
package body PSU_Logging is
procedure csv_put (File : in File_Type; Item : in Item_Type_t) is
begin
Put (File, Item_Type_t'Image (Item));
Put (File, ", ");
end csv_put;
procedure csv_put_float is new csv_put (Item_Type_t => Float);
procedure csv_put_duration …Run Code Online (Sandbox Code Playgroud)