[cmake]如何使用cmake在Windows上包含和链接系统库

时间:2016-04-30 14:18:26

标签: c++ cmake nmake

这是我的cpp代码:

#pragma once

#include <cstdio>

int main(char** args, int size)
{
    printf("aaaaa\n");
    return 1;
}

这是我的 CMakeLists.txt

cmake_minimum_required(VERSION 3.5)
set(PROJECT_ROOT_PATH "./")
add_executable(app ${PROJECT_ROOT_PATH}/app.c)

我的步骤运行命令如下:

cmake -G "NMake Makefiles" ./
nmake

当我运行nmake时,有很多这样的错误:

D:\Program_Filesx86\Microsoft Visual Studio 14.0\VC\include\cstdio(36): error C2054: expected '(' to follow 'using' [E:\cmake-test\app.vcxproj]
D:\Program_Filesx86\Microsoft Visual Studio 14.0\VC\include\cstdio(36): error C2061: syntax error: identifier 'using' [E:\cmake-test\app.vcxproj]

如果在那里保留一个空函数:

#pragma once

int main(char** args, int size)
{
    return 1;
}

nmake将正常运行并输出可执行文件: app.exe

是我没有指定包含和Windows SDK库的问题? 如果是的话,我该如何配置它们?

1 个答案:

答案 0 :(得分:1)

文件cstdio可能包含C ++特定的内容。 C ++是C子集的超集,因此并非每个C ++代码都是有效的C。

CMake将您的.c文件编译为C,因此语法错误。

在您的情况下,错误的来源是C编程语言中不存在的C ++ using语句。

要解决问题:

  • #include <stdio.h>(并按原样编译为C语言)

  • 将文件重命名为.cpp(因此它将编译为C ++)