Msvs 2005 и Nmake

  • Автор темы Автор темы floke
  • Дата начала Дата начала
F

floke

Нужно скомпилировать программу, причем часть компилирует VS, часть утилита nmake через написанный makefile, после чего VS начинает линковать полученные файлы. Реализовано это следующим образом(на простом примере):
Фаил, который компилирует VS:
test_make.cpp
C++:
extern void prnt(int);
int main()
{
prnt(5);
return 0;
}

2 файлики которые компилирует nmake через makefile
myhead.h
C++:
#ifndef __MYHEAD_H_
#define __MYHEAD_H_

void prnt(int);

#endif
mysrc.cpp

C++:
#include "myhead.h"
#include <stdio.h>

void prnt(int i)
{

printf("my number from mysrc %d " , i);
}
компиляция последних двух запускается через bat фаил(запускается он vs через свойства проекта -> build events -> pre build events)

На этапе линковки возникает ошибка, мол линкер не находии метод prnt(int) . Заметил пару особенностей:
1) если компилить проект из командной строки - всё прекрасно компилиться и линкуется
2) если компилить проект из VS (весь проект, то есть добавить myhead и mysrc к проекту и сделать build ) - линковку проходит, запускается
3) если компилить из VS проект как в п2 и потом подменить полученные mysrc.obj и mysrc.sbr файлы на те, которые получаться в результате компиляции из коммандной строки(при помощи того же Makefile) то проект линкуется из VS успешно

Как мне показалось, VS ищет extern функцию только в файлах проекта(а мне бы нужно, чтоб метод искался среди всех файлов, содержащихся в папке).
 
а мне бы нужно, чтоб метод искался среди всех файлов, содержащихся в папке
Сомневаюсь что так можно.

Почему бы тебе не компилировать все из VS или все из командной строки??
 
Сомневаюсь что так можно.

Почему бы тебе не компилировать все из VS или все из командной строки??

бывает, нужно писать врапперы к разным программам(например скомпилить исходники UNIX приложения под win или ещё чего по-хуже, например использовать один графический интерфейс для разных приложения). Так вот чтобы каждый раз не создавать новыйй проект, можно сделать один, содержащий лишь наш враппер и универсальный makefile. Проект в VS при компиляции(перед компиляцией или перед линковкой) будет запускать nmake, которому скормиться makefile. В результате, на момент запуска линковщика из VS, у нас уже будут все *.obj *.sbr и прочие файлы, необходимые для построения проекта.

Ответ на свой вопрос я уже нашел: в свойствах проекта нужно было в параметрах линковщика в additional depend... указать папку, которая содержит ТОЛЬКО файлы, получившиеся после работы makefilе(то есть необходимо, чтобы *.obj ... файлы проекта и *.obj файлы после nmake /f makefile.mak были в разных папках). Причем путь проиписывается так: .\.....\*.obj , то есть все файлы из папки. ТОгда всё будет ок.

Да, кстати, может кто-нить столкнется... в makefile в ситтуации, подобной моей, обращайте внимание на параметры компилятора. А то я недельку посидел с левыми ошибками и redefinition в стандартных библиотеках
 
VS особо не пользуюсь, но буду иметь в виду.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →

Популярный контент

🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab