2016-02-23 1 views
1

Я использую Clion, который использует CMake, который использует CMakeLists.txt, который выглядит следующим образом:Документация для CMake -std параметры

cmake_minimum_required(VERSION 3.3) 
project(Thesis) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c99") 

set(SOURCE_FILES main.cpp graph.h graph.c shared.h shared.c) 
add_executable(Thesis ${SOURCE_FILES}) 

Я был поиск и поиск объяснений по -std=c99. Значение по умолчанию было -std=c++11, и я изменил его, потому что я пишу программу C, по интуиции, я не видел этого ключевого слова нигде, я просто догадался. Однако я не совсем понимаю, что делает этот параметр, и я хочу. Какие другие параметры могут потребоваться?

Где именно эта документация?

+1

'-std' является ** компилятор ** флаг, а не CMake один. '-std = c99' означает, что компилятор должен использовать [стандарт C99] (https://en.wikipedia.org/wiki/C99). – Tsyvarev

+2

, и если вы захотите установить CMake 3.3 как минимум, лучше использовать ['CMAKE_C_STANDARD'] (https://cmake.org/cmake/help/v3.3/variable/CMAKE_C_STANDARD.html) и, возможно, [' CMAKE_C_STANDARD_REQUIRED'] (https://cmake.org/cmake/help/v3.3/variable/CMAKE_C_STANDARD_REQUIRED.html) ... или установить соответствующие целевые свойства. – zaufi

ответ

2

Прежде всего. Если вы пишете программу на C, назовите свои файлы .c - not .cpp, чтобы убедиться, что CMake идентифицирует их как код C. По этой причине вы видите -std=c++11 по умолчанию.

Вы можете использовать SET (CMAKE_C_FLAGS ...) для добавления флагов компилятора, даже если это не рекомендуется. Вы никогда не должны предполагать, что GCC будет вызван.

As @zaufi сказал. Вы можете использовать:

set_property(TARGET Thesis PROPERTY C_STANDARD 99) 

https://cmake.org/cmake/help/v3.1/prop_tgt/C_STANDARD.html#prop_tgt:C_STANDARD

-std флаг является флагом GCC компилятор, который определить, какие функции языка GCC должен включить. Подробнее здесь: http://linux.die.net/man/1/gcc

-std= 
    Determine the language standard. 
    This option is currently only supported when compiling C or C++ . 

    The compiler can accept several base standards, such as c89 or c++98, 
    and GNU dialects of those standards, such as gnu89 or gnu++98. By 
    specifying a base standard, the compiler will accept all programs 
    following that standard and those using GNU extensions that do not 
    contradict it. For example, -std=c89 turns off certain features of 
    GCC that are incompatible with ISO C90, such as the "asm" and 
    "typeof" keywords, but not other GNU extensions that do not have a 
    meaning in ISO C90, such as omitting the middle term of a "?:" 
    expression. On the other hand, by specifying a GNU dialect of a 
    standard, all features the compiler support are enabled, even when 
    those features change the meaning of the base standard and some 
    strict-conforming programs may be rejected. 
Смежные вопросы