Я использую CMake
для создания make файлов unix. После этого я скомпилирую проект с помощью утилиты make
.
Проблема в том, что я не вижу никаких предупреждений! Например, это приводит к чистой сборке без предупреждений:
#include <iostream>
class Foo
{
int first;
int second;
public:
Foo(int a, int b)
: second(a) // invalid initialization order
, first(b)
{
}
};
int main(int argc, char** argv)
{
int unused; // unused variable
int x;
double y = 3.14159;
x = y; // invalid cast
Foo foo(1,2);
std::cout << y << std::endl;
return 0;
}
Неиспользуемая переменная и переменная с потерями - никаких предупреждений! Мой файл CMakeLists.txt
минималистичен:
cmake_minimum_required(VERSION 2.8)
add_executable(main main.cpp)
Когда я запускаю CMake
, а затем make
мой вывод выглядит следующим образом:
[100%] Building CXX object CMakeFiles/main.dir/main.cpp.o
Linking CXX executable main
[100%] Built target main
Но когда я добавляю эту строку кода:
#warning ("Custom warning")
Результат содержит предупреждение:
[100%] Building CXX object CMakeFiles/main.dir/main.cpp.o
../src/main.cpp:15:2: warning: #warning ("Custom Warning") [-Wcpp]
Linking CXX executable main
[100%] Built target main
Я использую Ubuntu 12.04 LTS и GCC в качестве компилятора. Возможно, CMake передает некоторый флаг компилятору, что приводит к отсутствию предупреждений. Как я могу проверить это? Я не могу читать make файлы, созданные CMake, они немного загадочны.