Makefiles на windows с g ++, связывая библиотеку - PullRequest
4 голосов
/ 23 февраля 2009

Я устал от MSVC ++ 6 и от того, что все постоянно говорят мне, что это дерьмовый компилятор и все такое.

Итак, теперь я решил попробовать использовать vim plus g ++ и make-файлы. Вот моя проблема; У меня есть следующий make-файл:

# This is supposed to be a comment..
CC = g++
# The line above sets the compiler in use..
# The next line sets the compilation flags
CFLAGS=-c -Wall

all: main.exe

main.exe: main.o Accel.o
    $(CC) -o main.exe main.o Accel.o 

main.o: main.cpp Accel.h
    $(CC) $(CFLAGS) main.cpp

Accel.o: Accel.cpp Accel.h
    $(CC) $(CFLAGS) Accel.cpp

clean:
    del main.exe *.o

Это выдает ошибку при попытке make, потому что мне нужно связаться с библиотекой Windows с именем Ws2_32.lib, которая нужна Winsock2.h, которую я include в одном из моих .h файлов.

Так как мне это сделать? Я попробовал -l вариант, но я не могу заставить его работать. Как это работает с путем, который имеет пробелы?

Ответы [ 6 ]

8 голосов
/ 23 февраля 2009

Первый шаг: найдите библиотеку, которую вы ищете. Для меня это в:

C:\Program Files\Microsoft Visual Studio\VC98\Lib

Второй шаг, передайте этот каталог с -L:

LINKFLAGS=-L"C:\Program Files\Microsoft Visual Studio\VC98\Lib"

Третий шаг, передайте имя библиотеки с -l (строчная буква L):

LINKFLAGS=-L"C:\Program Files\Microsoft Visual Studio\VC98\Lib" -lWs2_32

Тогда используйте это:

main.exe: main.o Accel.o
   $(CC) $(LINKFLAGS) -o main.exe main.o Accel.o 
3 голосов
/ 23 февраля 2009

Это не ответ на ваш вопрос, но я предлагаю использовать cmake . Это многоплатформенный генератор файлов проекта. Синтаксис файлов CMake довольно прост (безусловно, проще, чем Makefile) и генерирует проекты Makefile или Visual Studio по запросу.

Проблема с Make-файлом, написанным вручную, заключается в том, что очень скоро ваше дерево зависимостей становится настолько большим, что поддерживаются все правила того, что нужно для создания того, что становится очень утомительной операцией. Следовательно, существует множество генераторов Makefile (autotools, CMake) или альтернатив Makefile (Scons, waf, bjam, ....)

2 голосов
/ 25 февраля 2009

Вы должны связаться с библиотекой, поставляемой с компилятором. В случае с cygwin вы должны установить заголовочные файлы win32 api и файлы библиотеки, а затем связать с libws2_32 (опция компилятора будет выглядеть как -lws2_32).

2 голосов
/ 23 февраля 2009

Используйте -L, чтобы указать каталог, в котором gcc должен искать библиотеки . Используйте -l (строчный ell), чтобы указать библиотеку, которая будет связана с путями -L (и некоторыми значениями по умолчанию).

Чтобы избежать путей с пробелами, используйте обратную косую черту, одинарные или двойные кавычки, как того требует ваша оболочка. См. GNU make документация , GNU bash документация . См. Эту статью для информации о пробелах в других частях make-файлов GNU .

0 голосов
/ 01 августа 2010
LIBS = -L"..\Microsoft SDKs\Windows\v6.0A\Lib" -lWS2_32

$(CC) ... -o ... ... $(LIBS)

Этот синтаксис работал для меня!

0 голосов
/ 23 февраля 2009

MSVC ++ 6 немного продвигается, но вы не упомянули, как вы работали с MSVC ++ 9 и nmake (Visual C ++ Express 2008).

...