[cmake]如何使用 cmake 在 windows 上包含和 link 系统库
[cmake]how to include and link system libraries on windows using cmake
这是我的 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的包含和库的问题吗?
如果是这样,我该如何配置它们?
文件 cstdio
可能包含特定于 C++ 的内容。 C++ 是 C 子集的超集,因此并非每个 C++ 代码都是有效的 C。
CMake 将您的 .c
文件编译为 C,因此存在语法错误。
在你的例子中,错误的来源是 C++ using
语句,这些语句在 C 编程语言中不存在。
要解决此问题:
#include <stdio.h>
(并按原样编译为 C)
或
- 将文件重命名为
.cpp
(这样它将被编译为 C++)
这是我的 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的包含和库的问题吗? 如果是这样,我该如何配置它们?
文件 cstdio
可能包含特定于 C++ 的内容。 C++ 是 C 子集的超集,因此并非每个 C++ 代码都是有效的 C。
CMake 将您的 .c
文件编译为 C,因此存在语法错误。
在你的例子中,错误的来源是 C++ using
语句,这些语句在 C 编程语言中不存在。
要解决此问题:
#include <stdio.h>
(并按原样编译为 C)
或
- 将文件重命名为
.cpp
(这样它将被编译为 C++)