Msvs 2005 и Nmake

Тема в разделе "MS Visual C++", создана пользователем floke, 16 дек 2010.

  1. floke

    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 функцию только в файлах проекта(а мне бы нужно, чтоб метод искался среди всех файлов, содержащихся в папке).
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Сомневаюсь что так можно.

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

    floke Гость

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

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

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

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    VS особо не пользуюсь, но буду иметь в виду.
     
Загрузка...
Похожие Темы - Msvs 2005 Nmake
  1. KiR
    Ответов:
    27
    Просмотров:
    11.782
  2. Спартак
    Ответов:
    7
    Просмотров:
    3.626
  3. bobo
    Ответов:
    16
    Просмотров:
    7.552
  4. bobo
    Ответов:
    3
    Просмотров:
    2.063
  5. bobo
    Ответов:
    0
    Просмотров:
    1.622

Поделиться этой страницей