Как мне установить C11 как стандарт для компиляции под CMake, clang и Visual studio? - PullRequest
1 голос
/ 11 октября 2019

Кто-нибудь знает, как установить стандарт C на C11 при использовании Visual Studio 2019, CMake и Clang.

В настоящее время у меня есть это, но по какой-то причине clang не распознает его как флаг:

if(WIN32) 
    add_definitions("-std=c11 -D _CRT_SECURE_NO_WARNINGS")
endif(WIN32)

, вместо этого он компилирует его как C ++

CMakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 3.10.2)
PROJECT(cpu LANGUAGES C VERSION 0.0.1 DESCRIPTION "6502 emulator")

set(CMAKE_BINARY_DIR "./")
set(CMAKE_C_STANDARD 11)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set(CMAKE_BUILD_TYPE DEBUG)
find_package(Curses COMPONENTS)

file(COPY "./headers/cpu.h" DESTINATION "${CMAKE_BINARY_DIR}/headers/cpu.h")

include_directories(headers)

file(GLOB CPU_SOURCES "src/cpu.c" "src/logger.c" "src/cartridge.c")
file(GLOB MONITOR_SOURCES "src/ui/[A-Za-z]*.c")


if(WIN32) 
    add_definitions("-std=c11 -D _CRT_SECURE_NO_WARNINGS")
endif(WIN32)

if(UNIX)
    set(CMAKE_C_FLAGS_DEBUG "-g -O0 -std:c11 -Wall -Wextra -fsanitize=address -fsanitize=undefined -DDEBUG")
    set(CMAKE_C_FLAGS "-std=c11")
    target_link_options(cpu PUBLIC "-D DEBUG")
    target_link_options(monitor PUBLIC "-D DEBUG ")
endif(UNIX)

add_library(cpu STATIC ${CPU_SOURCES})
add_executable(monitor ${MONITOR_SOURCES})



set_target_properties(cpu PROPERTIES PUBLIC_HEADER "../headers/cpu.h")

target_link_libraries(monitor cpu)

if(Curses_FOUND)
    include_directories(${CURSES_INCLUDE_DIR})
    target_link_libraries(monitor ${CURSES_LIBRARIES})
else (NOT Curses_FOUND)
    target_link_libraries(monitor)
endif(Curses_FOUND)

1 Ответ

0 голосов
/ 11 октября 2019

Я только что узнал, что clang явно использует официальный Windows SDK для компиляции, поэтому я почти уверен, что именно поэтому я не могу использовать c11.

Источник: https://nullprogram.com/blog/2016/06/13/

...