Msvs 2005 и Nmake

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

  1. floke

    floke Гость

    Репутация:
    0
    Нужно скомпилировать программу, причем часть компилирует 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

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

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

    floke Гость

    Репутация:
    0
    бывает, нужно писать врапперы к разным программам(например скомпилить исходники 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

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

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