如何为 Visual Studio 构建工具 cl.exe 编写 makefile(nmake)

Posted

技术标签:

【中文标题】如何为 Visual Studio 构建工具 cl.exe 编写 makefile(nmake)【英文标题】:How to write makefile(nmake) for visual studio build tool cl.exe 【发布时间】:2017-08-25 13:41:09 【问题描述】:

我想通过在**NIX 系统中调用类似于makenmake 来使用visual-studio 构建工具cl.exe 构建一个c 应用程序。我写了一个makefile。它找不到用于链接的include 文件和object 文件。我找不到太多关于如何链接库的参考资料。

CC=cl.exe
INC=-I../include 
LIB=-L../lib 

socket: socket.c
    $(CC) socket.c $(INC) $(LIB) -lssl -lcrypto

输出

D:\client>nmake

Microsoft (R) Program Maintenance Utility Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.

cl.exe socket.c -I../include -L../lib -lssl -lcrypto
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

cl : Command line warning D9002 : ignoring unknown option '-L../lib'
cl : Command line warning D9002 : ignoring unknown option '-lssl'
cl : Command line warning D9002 : ignoring unknown option '-lcrypto'
socket.c
Microsoft (R) Incremental Linker Version 10.00.40219.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:socket.exe
socket.obj
LINK : fatal error LNK1104: cannot open file 'Ws2_32.lib'
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cl.exe"' : return code '0x2'
Stop.

【问题讨论】:

使用 Visual Studio 控制台窗口,该窗口设置环境变量,例如包含位置。如果您想使用常规控制台窗口,请使用 Visual Studio 之一,并执行“设置”命令以查看所有设置。对于其中包含空格的路径,请用引号 (") 将它们括起来。 @rcgldr 已经从 Visual Studio 控制台窗口调用 nmake。正如错误中所说的ignoring unknown option '-L../lib' 这些是我放置在lib 文件夹中的本地包含文件。看不懂大概-L @rcgldr 加双引号没有区别,结果相同 包含路径:/I<dir>,库路径/link /LIBPATH:<dir> 我已经告诉过你了。试试link /? 【参考方案1】:

cl.exe 不对库和包含文件使用 gcc 语法。

这是一个(可用但不完美)如何指定文件的示例:

cl main.c freetype.lib gdi32.lib glew.lib jpeg.lib

您可能还想阅读how to include in cl.exe

【讨论】:

我不想在一行上用cl 命令写出所有库的列表。我的问题是如何以更易于管理的方式编写生成文件。我可以拥有超过 50 个包含文件和许多库。 cl /help 也没有显示完整的图片。如果我想链接然后/link/LIBPATH 来自哪里? 您可以(应该)编写 makefile 以便为每个源文件生成所需的依赖文件。该依赖文件在由 makefile 生成时,将包含所有库头引用。

以上是关于如何为 Visual Studio 构建工具 cl.exe 编写 makefile(nmake)的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Visual Studio 项目构建 Qmake?专门用于 octomap 库的 QGLViewer

CMake 如何为 Visual Studio 2015 项目指定“平台工具集”?

如何为visual studio更改ctrl + space

如何为 Visual Studio 2012 调试器编写自定义本机可视化工具 DLL?

LLVM 在 Windows 上构建:跳过 Visual Studio cl.exe [重复]

Visual Studio Community 2017 cl 链接器不会链接 GTK3 库?