如何为 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
系统中调用类似于make
的nmake
来使用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?