Вот файл CMakeLists.txt, который не работает. Я перенес проект с использования интерфейса WinAPI напрямую на использование SDL2. Вот результат CMakeLists.txt. За исключением того, что для целей данного обсуждения я использую в качестве исходного кода значительно упрощенную тестовую программу, которая напрямую и только зависит от SDL2.
cmake_minimum_required(VERSION 3.28)
project(my-project)
set (CMAKE_CXX_STANDARD 11)
set (TEST TestCase.cpp)
#set (CMAKE_PREFIX_PATH C:\\msys64\\ucrt64)
#find_package(SDL2 REQUIRED)
#unset(CMAKE_PREFIX_PATH)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
include_directories(. Library Tools Toolkit APClass Library/jpeg ${SDL2_INCLUDE_DIRS})
# include_directories(SYSTEM C:\\msys64\\mingw64\\include)
include(Library/CMakeLists.txt)
include(Tools/CMakeLists.txt)
include(APClass/CMakeLists.txt)
add_executable(TestProgram ${TEST} ${DRAWBOX} ${TOOLS} ${APCLASS})
target_compile_features(TestProgram PUBLIC cxx_std_11)
target_compile_options(TestProgram PRIVATE )
target_link_libraries(TestProgram ${SDL2_LIBRARIES} libSDL2_gfx.a
SDL2_image SDL2_ttf
)
Он не скомпилируется. При сборке TestCase.cpp возникает ошибка:
Error C1083 Cannot open include file: 'unistd.h': No such file or directory
Проблема стала очевидной, когда я экспериментировал с CMAKE_PREFIX_PATH, но это может не иметь никакого значения. Никакая очистка кэша не помогает. Аналогично сообщается и о множестве других стандартных заголовков, таких как «strings.h».
Я попробовал добавить строку 13:
include_directories(SYSTEM C:\\sys64\\mingw64\\include)
но, как оказалось, это приводит к появлению заголовков для другого компилятора и просто создает ужасный беспорядок.
Вот CMakeLists. txt, который работает, предшественник того, который не работает. Программа компилируется и запускается.
cmake_minimum_required(VERSION 3.28)
project(my-project)
set (CMAKE_CXX_STANDARD 11)
set (TEST Test/CheckerCheckerBoardBoard.cpp)
include_directories(. Library Tools Toolkit APClass Library/jpeg)
include(Library/CMakeLists.txt)
include(Tools/CMakeLists.txt)
include(APClass/CMakeLists.txt)
message( STATUS DRAWBOX=${DRAWBOX})
add_library(Drawbox STATIC ${DRAWBOX} ${TOOLS} ${APCLASS})
add_executable(TestProgram WIN32 ${TEST} ${DRAWBOX} ${TOOLS} ${APCLASS})
target_compile_features(Drawbox PUBLIC cxx_std_11)
target_compile_options(Drawbox PRIVATE -showIncludes)
target_compile_features(TestProgram PUBLIC cxx_std_11)
target_compile_options(TestProgram PRIVATE
)
target_link_libraries(TestProgram winmm.lib)
Я пытаюсь увидеть разницу между двумя сценариями CMake, которые могли бы объяснить эту проблему.
Где искать такую проблему? Я хотел бы представить хороший подробный файл журнала, но мне понадобится помощь, чтобы узнать, как его создать. Но вот журнал чистой генерации CMake:
1> CMake generation started for configuration: 'x64-Debug'.
1> Command line: "C:\Windows\system32\cmd.exe" /c "%SYSTEMROOT%\System32\chcp.com 65001 >NUL && "C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\COMMUNITY\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\CMake\bin\cmake.exe" -G "Ninja" -DCMAKE_BUILD_TYPE:STRING="Debug" -DCMAKE_INSTALL_PREFIX:PATH="C:\Users\ken\Desktop\prog24\Drawboxish\install\x64-Debug" -DCMAKE_C_COMPILER:FILEPATH="C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.41.34120/bin/Hostx64/arm64/cl.exe" -DCMAKE_CXX_COMPILER:FILEPATH="C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.41.34120/bin/Hostx64/arm64/cl.exe" -DCMAKE_MAKE_PROGRAM="C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\COMMUNITY\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\Ninja\ninja.exe" "C:\Users\ken\Desktop\prog24\Drawboxish" 2>&1"
1> Working directory: C:\Users\ken\Desktop\prog24\Drawboxish\build\x64-Debug
1> [CMake] -- Configuring done (0.2s)
1> [CMake] -- Generating done (0.0s)
1> [CMake] -- Build files have been written to: C:/Users/ken/Desktop/prog24/Drawboxish/build/x64-Debug
1> Extracted CMake variables.
1> Extracted source files and headers.
1> Extracted code model.
1> Extracted toolchain configurations.
1> Extracted includes paths.
1> CMake generation finished.
Вот TestCase.cpp.
#include
#include
#include
#include
SDL_Window* gWindow = NULL; //The window we'll be rendering to
SDL_Renderer* gRenderer = NULL; // Renders to an offscreen "texture" (frequent)
static SDL_Texture *target;
SDL_Event event;
TTF_Font *gFont;
void DrawNow();
int points[][2] = {
{50, 50},
{200, 100},
{50, 300},
{400, 400},
{300, 70},
{70, 450}
};
void DrawText(int x, int y, const char* text, SDL_Color fg) {
int width, height;
if (strlen(text) == 0) return;
SDL_Color bgColor = { 0xff, 0xff, 0xff, 0xff};
SDL_Surface* textSurface = TTF_RenderText_Blended(gFont, text, fg);
if( textSurface == NULL )
printf( "Unable to render text surface! SDL_ttf Error: %s\n", TTF_GetError() );
else {
//Create texture from surface pixels
SDL_Texture *mTexture = SDL_CreateTextureFromSurface( gRenderer, textSurface );
if( mTexture == NULL ) {
printf( "Unable to create texture from rendered text! SDL Error: %s\n", SDL_GetError() );
} else {
//Get image dimensions
width = textSurface->w;
height = textSurface->h;
}
//Get rid of old surface
SDL_FreeSurface( textSurface );
//Render to screen
int descent = TTF_FontDescent(gFont);
//printf("height: %d descent:%d\n", height, descent);
SDL_Rect renderQuad = { x, y-height-descent, width, height };
SDL_RenderCopy( gRenderer, mTexture, NULL, &renderQuad);
SDL_DestroyTexture(mTexture);
}
}
void TextTest() {
//Rectangle(30, 30, 140, 80, filled + blue);
SDL_Color c1 = {0xff, 0xff, 0x00, 0x00};
SDL_Color c2 = {0xff, 0x00, 0xff, 0x00};
DrawText(50, 50, "hello", c1);
DrawText(60, 55, "goodbye", c2);
DrawNow();
}
void AutoDraw() { // "User" graphics
SDL_Rect rr = {10, 10, 120, 120};
int outcome = SDL_RenderSetViewport(gRenderer, &rr);
filledCircleColor(gRenderer, 100, 100, 40, 0xff00ff00);
sleep(1);
DrawNow();
}
void DrawNow() {
while (SDL_PollEvent(&event)) {
}
SDL_SetRenderTarget(gRenderer, NULL);
SDL_RenderCopy(gRenderer, target, NULL, NULL);
SDL_RenderPresent(gRenderer);
SDL_SetRenderTarget(gRenderer, target);
}
bool drawbox_inited = false;
int main() {
if (! drawbox_inited) {
//Initialize SDL
if( SDL_Init( SDL_INIT_EVERYTHING ) < 0 ) {
printf( "SDL could not initialize! SDL Error: %s\n", SDL_GetError() );
return 1;
}
gWindow = SDL_CreateWindow("Drawbox", 0, 0, 1200, 900, 0);
if( gWindow == NULL ) {
printf( "Window could not be created! SDL Error: %s\n", SDL_GetError() );
return -1;
}
//Create renderer for window
gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
if( gRenderer == NULL )
{
printf( "Renderer could not be created! SDL Error: %s\n", SDL_GetError() );
return -1;
}
/* Create texture for display buffering */
target = SDL_CreateTexture(gRenderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 1200, 900);
SDL_SetRenderTarget(gRenderer, target);
//SDL_RenderSetLogicalSize(gRenderer, 2000, 1400);
//Clear buffer
SDL_SetRenderDrawColor( gRenderer, 0, 0, 0, 0xff );
SDL_RenderClear( gRenderer );
// Set up for fonts and text
if (TTF_Init() < 0) {
printf("ttf could not be initialized: %s\n", SDL_GetError());
} else {
gFont = TTF_OpenFont( "Cabin-Regular.ttf", 20 );
if( gFont == NULL )
{
printf( "Failed to load default font! SDL_ttf Error: %s\n", TTF_GetError() );
}
}
// handle window creation events: A MUST!
SDL_Event event;
while (SDL_PollEvent(&event)) {
// printf("Event: %d\n", event.type);
}
}
//ClearClip();
srand(time(NULL));
AutoDraw();
sleep(6);
return 0;
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... d-includes
Проект Visual Studio CMake не может найти стандартные компоненты C++ ⇐ C++
Программы на C++. Форум разработчиков
1737474535
Anonymous
Вот файл CMakeLists.txt, который не работает. Я перенес проект с использования интерфейса WinAPI напрямую на использование SDL2. Вот результат CMakeLists.txt. За исключением того, что для целей данного обсуждения я использую в качестве исходного кода значительно упрощенную тестовую программу, которая напрямую и только зависит от SDL2.
cmake_minimum_required(VERSION 3.28)
project(my-project)
set (CMAKE_CXX_STANDARD 11)
set (TEST TestCase.cpp)
#set (CMAKE_PREFIX_PATH C:\\msys64\\ucrt64)
#find_package(SDL2 REQUIRED)
#unset(CMAKE_PREFIX_PATH)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
include_directories(. Library Tools Toolkit APClass Library/jpeg ${SDL2_INCLUDE_DIRS})
# include_directories(SYSTEM C:\\msys64\\mingw64\\include)
include(Library/CMakeLists.txt)
include(Tools/CMakeLists.txt)
include(APClass/CMakeLists.txt)
add_executable(TestProgram ${TEST} ${DRAWBOX} ${TOOLS} ${APCLASS})
target_compile_features(TestProgram PUBLIC cxx_std_11)
target_compile_options(TestProgram PRIVATE )
target_link_libraries(TestProgram ${SDL2_LIBRARIES} libSDL2_gfx.a
SDL2_image SDL2_ttf
)
Он не скомпилируется. При сборке TestCase.cpp возникает ошибка:
Error C1083 Cannot open include file: 'unistd.h': No such file or directory
Проблема стала очевидной, когда я экспериментировал с CMAKE_PREFIX_PATH, но это может не иметь никакого значения. Никакая очистка кэша не помогает. Аналогично сообщается и о множестве других стандартных заголовков, таких как «strings.h».
Я попробовал добавить строку 13:
include_directories(SYSTEM C:\\sys64\\mingw64\\include)
но, как оказалось, это приводит к появлению заголовков для другого компилятора и просто создает ужасный беспорядок.
Вот CMakeLists. txt, который работает, предшественник того, который не работает. Программа компилируется и запускается.
cmake_minimum_required(VERSION 3.28)
project(my-project)
set (CMAKE_CXX_STANDARD 11)
set (TEST Test/CheckerCheckerBoardBoard.cpp)
include_directories(. Library Tools Toolkit APClass Library/jpeg)
include(Library/CMakeLists.txt)
include(Tools/CMakeLists.txt)
include(APClass/CMakeLists.txt)
message( STATUS DRAWBOX=${DRAWBOX})
add_library(Drawbox STATIC ${DRAWBOX} ${TOOLS} ${APCLASS})
add_executable(TestProgram WIN32 ${TEST} ${DRAWBOX} ${TOOLS} ${APCLASS})
target_compile_features(Drawbox PUBLIC cxx_std_11)
target_compile_options(Drawbox PRIVATE -showIncludes)
target_compile_features(TestProgram PUBLIC cxx_std_11)
target_compile_options(TestProgram PRIVATE
)
target_link_libraries(TestProgram winmm.lib)
Я пытаюсь увидеть разницу между двумя сценариями CMake, которые могли бы объяснить эту проблему.
Где искать такую проблему? Я хотел бы представить хороший подробный файл журнала, но мне понадобится помощь, чтобы узнать, как его создать. Но вот журнал чистой генерации CMake:
1> CMake generation started for configuration: 'x64-Debug'.
1> Command line: "C:\Windows\system32\cmd.exe" /c "%SYSTEMROOT%\System32\chcp.com 65001 >NUL && "C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\COMMUNITY\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\CMake\bin\cmake.exe" -G "Ninja" -DCMAKE_BUILD_TYPE:STRING="Debug" -DCMAKE_INSTALL_PREFIX:PATH="C:\Users\ken\Desktop\prog24\Drawboxish\install\x64-Debug" -DCMAKE_C_COMPILER:FILEPATH="C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.41.34120/bin/Hostx64/arm64/cl.exe" -DCMAKE_CXX_COMPILER:FILEPATH="C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.41.34120/bin/Hostx64/arm64/cl.exe" -DCMAKE_MAKE_PROGRAM="C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\COMMUNITY\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\Ninja\ninja.exe" "C:\Users\ken\Desktop\prog24\Drawboxish" 2>&1"
1> Working directory: C:\Users\ken\Desktop\prog24\Drawboxish\build\x64-Debug
1> [CMake] -- Configuring done (0.2s)
1> [CMake] -- Generating done (0.0s)
1> [CMake] -- Build files have been written to: C:/Users/ken/Desktop/prog24/Drawboxish/build/x64-Debug
1> Extracted CMake variables.
1> Extracted source files and headers.
1> Extracted code model.
1> Extracted toolchain configurations.
1> Extracted includes paths.
1> CMake generation finished.
Вот TestCase.cpp.
#include
#include
#include
#include
SDL_Window* gWindow = NULL; //The window we'll be rendering to
SDL_Renderer* gRenderer = NULL; // Renders to an offscreen "texture" (frequent)
static SDL_Texture *target;
SDL_Event event;
TTF_Font *gFont;
void DrawNow();
int points[][2] = {
{50, 50},
{200, 100},
{50, 300},
{400, 400},
{300, 70},
{70, 450}
};
void DrawText(int x, int y, const char* text, SDL_Color fg) {
int width, height;
if (strlen(text) == 0) return;
SDL_Color bgColor = { 0xff, 0xff, 0xff, 0xff};
SDL_Surface* textSurface = TTF_RenderText_Blended(gFont, text, fg);
if( textSurface == NULL )
printf( "Unable to render text surface! SDL_ttf Error: %s\n", TTF_GetError() );
else {
//Create texture from surface pixels
SDL_Texture *mTexture = SDL_CreateTextureFromSurface( gRenderer, textSurface );
if( mTexture == NULL ) {
printf( "Unable to create texture from rendered text! SDL Error: %s\n", SDL_GetError() );
} else {
//Get image dimensions
width = textSurface->w;
height = textSurface->h;
}
//Get rid of old surface
SDL_FreeSurface( textSurface );
//Render to screen
int descent = TTF_FontDescent(gFont);
//printf("height: %d descent:%d\n", height, descent);
SDL_Rect renderQuad = { x, y-height-descent, width, height };
SDL_RenderCopy( gRenderer, mTexture, NULL, &renderQuad);
SDL_DestroyTexture(mTexture);
}
}
void TextTest() {
//Rectangle(30, 30, 140, 80, filled + blue);
SDL_Color c1 = {0xff, 0xff, 0x00, 0x00};
SDL_Color c2 = {0xff, 0x00, 0xff, 0x00};
DrawText(50, 50, "hello", c1);
DrawText(60, 55, "goodbye", c2);
DrawNow();
}
void AutoDraw() { // "User" graphics
SDL_Rect rr = {10, 10, 120, 120};
int outcome = SDL_RenderSetViewport(gRenderer, &rr);
filledCircleColor(gRenderer, 100, 100, 40, 0xff00ff00);
sleep(1);
DrawNow();
}
void DrawNow() {
while (SDL_PollEvent(&event)) {
}
SDL_SetRenderTarget(gRenderer, NULL);
SDL_RenderCopy(gRenderer, target, NULL, NULL);
SDL_RenderPresent(gRenderer);
SDL_SetRenderTarget(gRenderer, target);
}
bool drawbox_inited = false;
int main() {
if (! drawbox_inited) {
//Initialize SDL
if( SDL_Init( SDL_INIT_EVERYTHING ) < 0 ) {
printf( "SDL could not initialize! SDL Error: %s\n", SDL_GetError() );
return 1;
}
gWindow = SDL_CreateWindow("Drawbox", 0, 0, 1200, 900, 0);
if( gWindow == NULL ) {
printf( "Window could not be created! SDL Error: %s\n", SDL_GetError() );
return -1;
}
//Create renderer for window
gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
if( gRenderer == NULL )
{
printf( "Renderer could not be created! SDL Error: %s\n", SDL_GetError() );
return -1;
}
/* Create texture for display buffering */
target = SDL_CreateTexture(gRenderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 1200, 900);
SDL_SetRenderTarget(gRenderer, target);
//SDL_RenderSetLogicalSize(gRenderer, 2000, 1400);
//Clear buffer
SDL_SetRenderDrawColor( gRenderer, 0, 0, 0, 0xff );
SDL_RenderClear( gRenderer );
// Set up for fonts and text
if (TTF_Init() < 0) {
printf("ttf could not be initialized: %s\n", SDL_GetError());
} else {
gFont = TTF_OpenFont( "Cabin-Regular.ttf", 20 );
if( gFont == NULL )
{
printf( "Failed to load default font! SDL_ttf Error: %s\n", TTF_GetError() );
}
}
// handle window creation events: A MUST!
SDL_Event event;
while (SDL_PollEvent(&event)) {
// printf("Event: %d\n", event.type);
}
}
//ClearClip();
srand(time(NULL));
AutoDraw();
sleep(6);
return 0;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79365988/visual-studio-cmake-project-cant-find-c-standard-includes[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия