2010-11-19 20 views
5

W moim projekcie mam plik "schematu" i narzędzie, które napisałem, aby wygenerować plik nagłówkowy. Używam cmake i kompilacji źródłowej do budowania aplikacji.Jak wygenerować nagłówek źródłowy za pomocą cmake?

Obecnie muszę ręcznie wygenerować plik nagłówkowy, a następnie skompilować aplikację.

Potem wymyśliłem te instrukcje CMakeLists.txt, ale generują one nagłówek w katalogu budowania zamiast w katalogu źródłowym.

configure_file(generator.pl generator COPYONLY) 
configure_file(schema.txt.in schema.txt COPYONLY) 
add_custom_command(
    OUTPUT generated.h 
    COMMAND ./generator schema.txt generated.h 
    DEPENDS mib_schema.txt.in generator.pl 
    COMMENT "Regenerating header file..." 
) 

Czy można wygenerować nagłówek w katalogu źródłowym?

edytować (w celu odzwierciedlenia odpowiedź):

Plik można dotrzeć bezpośrednio przez całkowicie kwalifikacjach jego ścieżkę albo z

${CMAKE_CURRENT_SOURCE_DIR} 

czyli

${CMAKE_CURRENT_BINARY_DIR} 

Tak, aby wygeneruj nagłówek w katalogu źródłowym, poprzedni fragment z CMakeLists.txt stanie się:

add_custom_command(
    OUTPUT generated.h 
    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/generator.pl ${CMAKE_CURRENT_SOURCE_DIR}/schema.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/generated.h 
    DEPENDS mib_schema.txt.in generator.pl 
    COMMENT "Regenerating header file..." 
) 

co jest prostsze. Dzięki

--to

+0

Właściwie jest to dobry pomysł. Jeśli mogę zapisać wygenerowany plik w katalogu źródłowym, zostanie on umieszczony w pakiecie źródłowym, który jest dokładnie tym, czego chcę (ponieważ w ten sposób użytkownicy mojej biblioteki nie muszą generować pliku, o ile nie modyfikują generatora i/lub plik danych źródłowych.) Oznacza to, że więcej osób może skompilować moją bibliotekę! –

Odpowiedz

5

myślę, że wygenerowany nagłówek są dobrze umieszczone w katalogu binarnego, ponieważ może chcesz stworzyć zbudować katalogi z tego samego źródła i różnych konfiguracjach powstałych w innym nagłówkiem wygenerowany.

może chcesz dołączyć do katalogu build do projektu:

include_directories(${CMAKE_CURRENT_BINARY_DIR}) 
+0

Jeśli program CMake nie może znaleźć pliku, należy go całkowicie zakwalifikować za pomocą '$ {CMAKE_CURRENT_BINARY_DIR}'. Jeśli jesteś pewien, że chcesz utworzyć pliki w katalogu źródłowym, możesz nawet użyć '$ {CMAKE_CURRENT_SOURCE_DIR}' w poleceniach 'configure' i' add_custom_command'. – tibur

+0

Zgadzam się, najlepsze miejsce dla wygenerowanych plików znajduje się w katalogu budowania. Ten nagłówek jest wygodny w katalogu źródłowym, ponieważ zapewnia użyteczne kodowanie podczas kodowania. Jest to ten sam nagłówek dla wszystkich konfiguracji kompilacji, więc posiadanie go w katalogu źródłowym nie jest w ogóle szkodliwe. UWAGA: Mam problemy z edytowaniem komentarzy, prawdopodobnie dlatego, że jestem w dużej sieci, która jest unikalnym adresem IP. Przepraszam za zamieszanie. – amso

Powiązane problemy