是否可以在Windows上运行cling?
我使用Visual C++ 12.0 从源代码(构建指令)成功编译了cling ,但是当我尝试运行时,我遇到以下运行时错误:
F:\Dev\open-source\Cling\src\build\Debug\bin>cling.exe
ERROR in cling::CIFactory::createCI():
resource directory F:\Dev\open-source\Cling\src\build\Debug\lib\clang\3.6.0 not found!
Assertion failed: !CurTokenLexer && "Cannot #include a file inside a macro!", file ..\..\..\..\..\tools\clang\lib\Lex\PPLexerChange.cpp, line 73
Run Code Online (Sandbox Code Playgroud)
我google了下一个链接:
顺便说一句,我有Clang(Clang版本3.6.0(主干)),一切正常.
当我运行时cling -x c,我仍然有相同的错误,但没有断言(-x意味着将后续输入文件视为类型<language>):
F:\Dev\open-source\Cling\src\build\Debug\bin>cling -x c
ERROR in cling::CIFactory::createCI():
resource directory F:\Dev\open-source\Cling\src\build\Debug\lib\clang\3.6.0 not found!
****************** CLING ******************
* Type C++ code and press enter to run it *
* Type .q to exit *
*******************************************
[cling]$ #include <stdio.h>
[cling]$ …Run Code Online (Sandbox Code Playgroud) 我从不使用铿锵声.
我不小心发现了这段代码:
#include <iostream>
void ???????(int ??????????)
{
std::cout << ?????????? << std::endl;
}
int main()
{
int ???????_?????????? = 0;
???????(???????_??????????);
}
Run Code Online (Sandbox Code Playgroud)
将编译好:http://rextester.com/NFXBL38644(clang 3.4(clang ++ -Wall -std = c ++ 11 -O2)).
这是一个铿锵声吗?为什么?谢谢.
UPD:我更想问为什么clang做出这样的决定?因为我从来没有找到过有人想要更多字符的讨论,那么c ++标准现在已经有了(2.3,rev.3691)
我想用 CMake构建Google glog作为更大项目的一部分(解决方案,用 Visual Studio 的话)。我想要的结果是:
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug
-DCMAKE_INSTALL_PREFIX:PATH=xxx {MAIN CMakeLists.txt location}
cmake --build . --target install --config Debug
Run Code Online (Sandbox Code Playgroud)
将在Debug配置中构建解决方案并将文件安装到xxx文件夹。
好的,glog是主要解决方案的子项目:
add_subdirectory(third_party/glog_0.3.4)
Run Code Online (Sandbox Code Playgroud)
在 Windows 上一切正常(请参阅 CMakeLists.txt):一切都按预期工作。
要glog在 Linux 上构建,我还需要配置.h.in文件(以及其他工作)。CMakeconfigure_file不起作用:我有.h文件,但它们#undef只包含's。但是glog's./configure工作正常,所以我发现ExternalProject_Add()可能有帮助:
if(UNIX)
include(ExternalProject)
ExternalProject_Add(glog
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/configure
CMAKE_GENERATOR 'Unix Makefiles'
BUILD_COMMAND ${MAKE})
endif()
Run Code Online (Sandbox Code Playgroud)
并且cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX:PATH=xxx .工作正常,但 …
我知道关于如何设置控制台大小有很多问题。但是所有找到的解决方案对我来说都是一样的,我的代码对我不起作用。
好的,所以为了设置控制台窗口大小,我需要两个函数。它们是SetConsoleScreenBufferSize()和SetConsoleWindowInfo()。我的函数的第一个版本:
bool SetWindowSize(size_t width, size_t height)
{
HANDLE output_handle = ::GetStdHandle(STD_OUTPUT_HANDLE);
if(output_handle == INVALID_HANDLE_VALUE)
return false;
COORD coord = {};
coord.X = static_cast<SHORT>(width);
coord.Y = static_cast<SHORT>(height);
if(::SetConsoleScreenBufferSize(output_handle, coord) == FALSE)
return false;
SMALL_RECT rect = {};
rect.Bottom = coord.X - 1;
rect.Right = coord.Y - 1;
return (::SetConsoleWindowInfo(output_handle, TRUE, &rect) != FALSE);
}
Run Code Online (Sandbox Code Playgroud)
SetConsoleScreenBufferSize()不适用于所有值。从文档:
指定的宽度和高度不能小于控制台屏幕缓冲区的窗口的宽度和高度
让我们尝试获取当前窗口的大小并调用我们的函数。要获取窗口大小,我需要GetConsoleScreenBufferInfo()函数。main() 测试代码:
HANDLE output_handle = ::GetStdHandle(STD_OUTPUT_HANDLE);
if(output_handle == INVALID_HANDLE_VALUE)
return 0;
CONSOLE_SCREEN_BUFFER_INFO info = {};
if(::GetConsoleScreenBufferInfo(output_handle, &info) …Run Code Online (Sandbox Code Playgroud)