小编gri*_*sha的帖子

在Windows上运行cling

是否可以在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)

c++ windows llvm cling

8
推荐指数
1
解决办法
4849
查看次数

标识符字符集(clang)

我从不使用铿锵声.

我不小心发现了这段代码:

#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)

c++ clang identifier

5
推荐指数
1
解决办法
1758
查看次数

在 Linux 上使用 CMake 构建 Google glog

我想用 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 .工作正常,但 …

c++ linux cmake glog

5
推荐指数
1
解决办法
5117
查看次数

在 Windows 上设置控制台窗口大小

我知道关于如何设置控制台大小有很多问题。但是所有找到的解决方案对我来说都是一样的,我的代码对我不起作用。

好的,所以为了设置控制台窗口大小,我需要两个函数。它们是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)

c++ winapi

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++ ×4

clang ×1

cling ×1

cmake ×1

glog ×1

identifier ×1

linux ×1

llvm ×1

winapi ×1

windows ×1