2015-01-05 4 views
3

Я пытаюсь скомпилировать исходные коды на C и C++. В настоящее время я использую стандарт C++ 0x для C++, добавив эту строку в файл cmake add_definitions(-std=c++0x).Смешивание источников C и C++ в cmake

Во время компиляции я получаю следующее предупреждение: cc1: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C [enabled by default] и эта ошибка: error: ‘for’ loop initial declarations are only allowed in C99 mode относится к циклу for в коде c.

Мне интересно, как я могу установить стандарт для кода c в файле cmake.

+0

См http://stackoverflow.com/questions/23818497/cmake-disable-std-c11-flag- for-c-files? rq = 1 – Eosis

+0

Посмотрите на обновленный ответ, я забыл, что с предыдущим ответом вы перезаписали уже установленные флаги. –

+0

Я заметил это, поэтому добавил стандарты к флагом. благодаря – MinaKamel

ответ

7

Вы не должны использовать add_definitions для этого, вместо того, чтобы сделать что-то вроде

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99") 

-std=c99 если вы хотите петли первоначальные объявления.

add_definitions для определений, таких как -DUSE_SOME_LIBRARY.

1

Вместо add_definitions вы должны использовать что-то вроде этого, вместо:

set(CMAKE_CXX_FLAGS "-std=c++0x") 
0

Вы должны первое испытание, если компилятор поддерживает C++ 11 см check_cxx_compiler_flag включены в макро CheckCXXCompilerFlag

Смежные вопросы