2017-08-25 4 views
0

Ich möchte cl.exe eine c Anwendung mit visual-studio Build-Tool erstellen, indem nmake ähnlich wie make in **NIX Systeme aufrufen. Ich habe eine makefile geschrieben. Es kann include Dateien und object Dateien für die Verknüpfung nicht finden. Ich konnte nicht viel Referenz finden, wie man Bibliotheken verbindet.Wie Make-Datei schreiben (nmake) für Visual Studio Build-Tool cl.exe

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

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

Ausgang

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. 
+0

Verwenden Sie die Visual Studio Konsolenfenster lesen mögen, die die Umwelt einrichtet Variablen wie die Include-Speicherorte. Wenn Sie ein normales Konsolenfenster verwenden möchten, verwenden Sie Visual Studio und führen Sie einen "set" -Befehl aus, um alle Einstellungen zu sehen. Bei Pfaden mit Leerzeichen in ihnen umgeben sie sie mit Anführungszeichen ("). – rcgldr

+0

@rcgldr ruft bereits' nmake' aus dem Visual Studio-Konsolenfenster auf. Wie im Fehler 'ignoring unknown option' -L ../ lib' sind diese meine lokalen Include-Dateien, die ich in 'lib'-Ordner platziert habe.Es versteht wahrscheinlich nicht' -L' –

+0

@rcgldr setzen doppelte Anführungszeichen macht keinen Unterschied, das gleiche Ergebnis –

Antwort

1

die cl.exe nicht die gcc-Syntax für Bibliotheken und Dateien enthalten. Hier

ist ein (verwendbar, aber nicht perfekt) Beispiel dafür, wie die Dateien angeben,:

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

Sie auch how to include in cl.exe

+0

Ich möchte nicht die Liste aller Bibliotheken mit 'cl' in einer Zeile schreiben. Meine Frage ist, wie man ein Makefile mit überschaubaren Wegen schreibt. Ich könnte mehr als 50 Include-Dateien und viele Bibliotheken haben. 'cl/help' zeigt nicht das komplette Bild. Wenn ich zum Beispiel "/ link" verlinken möchte und woher kommt '/ LIBPATH'? –

+0

Sie könnten (sollten) das Makefile so schreiben, dass es die benötigte Abhängigkeitsdatei für jede der Quelldateien erzeugt. Diese Abhängigkeitsdatei wird, wenn sie vom Makefile erzeugt wird, alle Bibliotheksheaderreferenzen enthalten. – user3629249

Verwandte Themen