[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

pl.comp.programming

Sprawdzanie "includa"

azot16

7/6/2007 2:10:00 AM

Witam.

Srodowisko VC 2005. Czy podczas kompilacji mozna sprawdzic dostepnosc
(istnienie) jakiegos pliku naglówkowego i w zaleznosci od wyniku
podjac takie lub inne dzialanie. Np. chce sprawdzic czy jest dostepny
plik "boost\random.hpp" i jezeli jest to go dolaczyc (#include <boost
\random.hpp>) a jezeli nie to dolaczyc plik "abc.h" (#include
"abc.h"). Chodzi o to aby podczas kompilacji nie wyskakiwal komunikat
o bledzie (brak pliku xyz) tylko, aby zostal dolaczony inny
(zastepczy) plik.

8 Answers

Lopez

7/6/2007 8:43:00 AM

0

azot16 napisa3(a):
> Witam.
>
> |rodowisko VC 2005. Czy podczas kompilacji mo?na sprawdzia dostepno?a
> (istnienie) jakiego? pliku nag3ówkowego i w zale?no?ci od wyniku
> podj?a takie lub inne dzia3anie. Np. chce sprawdzia czy jest dostepny
> plik "boost\random.hpp" i je?eli jest to go do3?czya (#include <boost
> \random.hpp>) a je?eli nie to do3?czya plik "abc.h" (#include
> "abc.h"). Chodzi o to aby podczas kompilacji nie wyskakiwa3 komunikat
> o b3edzie (brak pliku xyz) tylko, aby zosta3 do3?czony inny
> (zastepczy) plik.
>

A co jak nie znajdzie tez pliku abc.h?

W Unixach takie rzeczy sprawdza sie za pomoca autoconfa
jeszcze przed kompilacja. OIDP VC nie ma takiego narzedzia.
Na etapie kompilacji nie ma mozliwosci sprawdzenia
czy plik istnieje.

--
Pozdrawiam
Lopez

azot16

7/6/2007 5:23:00 PM

0

> A co jak nie znajdzie tez pliku abc.h?

Plik "abc.h" znajdzie, bo bedzie on w projekcie, jako "zastepczy".


> Na etapie kompilacji nie ma mozliwosci sprawdzenia czy plik istnieje.

A moze da sie napisac jakies makro, które to sprawdzi i ustawi np.
"#define FILE_X_OK"? Niestety z makrami jestem troche "na bakier",
dlatego pytam czy warto eksplorowac ten temat.

Lopez

7/6/2007 5:56:00 PM

0

azot16 napisa3(a):
>> A co jak nie znajdzie tez pliku abc.h?
>
> Plik "abc.h" znajdzie, bo bedzie on w projekcie, jako "zastepczy".

To dlaczego po prostu tak nie zostawisz?

>> Na etapie kompilacji nie ma mozliwosci sprawdzenia czy plik istnieje.
>
> A mo?e da sie napisaa jakie? makro, które to sprawdzi i ustawi np.
> "#define FILE_X_OK"? Niestety z makrami jestem troche "na bakier",
> dlatego pytam czy warto eksplorowaa ten temat.

Taki workaround:
- tworzysz skrypt (np. bat), ktory sprawdzi istnienie
pliku i zapisze "#define FILE_X_OK" w pliku config.h
- musisz go wywolac brzed zbudowaniem projektu,
najlepiej podlaczyc jakos do skryptu budujacego
- w projekcie includujesz config.h
- a nastepnie umieszczasz cos takiego

#ifdef FILE_X_OK
#include "file_x.h"
#else
#include "file_y.h"
#endif

--
Pozdrawiam
Lopez

azot16

7/7/2007 5:08:00 AM

0

> Taki workaround:
> - tworzysz skrypt (np. bat), ktory sprawdzi istnienie
> pliku i zapisze "#define FILE_X_OK" w pliku config.h
> - musisz go wywolac brzed zbudowaniem projektu,
> najlepiej podlaczyc jakos do skryptu budujacego
> - w projekcie includujesz config.h
> - a nastepnie umieszczasz cos takiego

No tak, o tym to wiedzialem. Caly czas licze na to, ze znajde jakies
mniej "kanciate" rozwiazanie. Po za tym to nie jest takie proste z tym
bat-em. Sprawdzany plik moze byc w jednym z katalogów, które sa
wskazane w projekcie jako katalogi z incudami. Trzeba by wiec
rozpracowac pliki projektu, wyciagnac stamtad liste katalogów,
sprawdzic wszystkie te katalogi itd. itd. A za rok wypuszcza nowe VS z
nowymi plikami projektu i wszystko bedzie trzeba robic od nowa.

A moze da sie zrobic tak:

1) includujemy plik i przechwytujemy komunikat o bledzie "brak pliku"
- jak to zrobic?

lub

2a) includujemy plik, zduszamy komunikat o bledzie (ze niby jest OK)
- jak to zrobic?
2b) sprawdzamy obecnosc (dostepnosc) typu danych, np. typ X jest
zdefiniowany (typedef) w pliku, który chcemy dolaczyc. Jezeli tego
typu nie ma to znaczy, ze plik sie nie dolaczyl i wtedy includujemy
inny plik (który juz na pewno jest) - jak to zrobic?

Zbyszek Malec

7/7/2007 8:22:00 AM

0

Dnia Fri, 06 Jul 2007 22:07:43 -0700, azot16 napisa3(a):

> A mo?e da sie zrobia tak:

A mo?e napisz po co ci to potrzebne. Mo?e da sie to zrobia pro?ciej.

--
Zbyszek Malec Ustronie 416
jid: zbyszanna@jid.pl

azot16

7/7/2007 7:30:00 PM

0

> A moze napisz po co ci to potrzebne. Moze da sie to zrobic prosciej.

Glówne zastosowanie:

Sprawdz czy jest dostepny Boost - jezeli tak to zastosuj rozwiazanie
oparte na Boost, a jezeli nie to zastosuj rozwiazanie alternatywne.
Wszystko ma sie dziac automatycznie, bez pytan czy instrukcji typu "co
zrobic gdy". Wydajesz polecenie "Build" i dostajesz odpowiedz
"Success" nie zaleznie od tego czy masz Boosta czy nie. Krótko mówiac
ma byc jak z telewizorem - wlaczasz i ogladasz i nie interesuje cie
to, ze wczoraj video bylo 4:3 a dzis jest 16:9, albo ze dzwiek sie
zmienil z mono na stereo - wlaczyles i ogladasz, bo telewizor sam
rozwiazuje swoje problemy.

Klopot polega na tym, ze jedynym wiarygodnym sprawdzeniem czy Boost
jest dostepny jest wincludowanie konkretnego pliku z Boosta. Jak sie
uda to korzystamy z Boosta, jak nie korzystamy z rozwiazania
alternatywnego.

PS. Szczerze mówiac nie chce mi sie wierzyc, ze po tylu latach rozwoju
jezyk C++ nie oferuje zadnego sposobu sprawdzenia dostepnosci pliku.
Dyrektywa #pragma odstawia niezle cuda, a nie potrafi sprawdzic czy
jest plik? Troche to dziwne.

Marcin 'Qrczak' Kowalczyk

7/7/2007 10:12:00 PM

0

Dnia 07-07-2007, So o godzinie 12:30 -0700, azot16 napisal(a):

> PS. Szczerze mówiac nie chce mi sie wierzyc, ze po tylu latach rozwoju
> jezyk C++ nie oferuje zadnego sposobu sprawdzenia dostepnosci pliku.
> Dyrektywa #pragma odstawia niezle cuda, a nie potrafi sprawdzic czy
> jest plik? Troche to dziwne.

To zazwyczaj i tak by nie wystarczylo, kiedy chcemy dolaczyc rózne
biblioteki w zaleznosci od jakichs warunków. Dolaczanie bibliotek dzieje
sie poza glównym zródlem C++. Boost jest wyjatkiem, ze sklada sie
glównie z plików naglówkowych.

Pod Linuxem od dawna stosuje sie do tego autoconf. Dziala na zasadzie
przygotowania odpowiedniej wersji plików przed kompilacja.

--
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://qrnik.knm.org.p...

Wiktor S.

7/9/2007 3:07:00 PM

0

> A mo?e da sie zrobia tak:

> 1) includujemy plik i przechwytujemy komunikat o b3edzie "brak pliku"
> - jak to zrobia?

zak3adam, ?e kompilator zwraca jaki? errorlevel w przypadku b3edu... no,
powinien chyba.


----------------
@echo off
kompiluj program_test_inkluduj?cy_sprawdzany_plik.c > nul
if errorlevel 1 goto niema

:jest
echo jest
goto end

:niema
echo nie ma
goto end

:end
----------------


--
Azarien