Programando com C e SDL2. Conte a sua experiencia (aproveita e da uma ajudinha com compilação, makefiles, etc.)

18 views
Skip to first unread message

Introscopia

unread,
Feb 10, 2019, 4:15:15 PM2/10/19
to Garoa Hacker Clube
Oi.
É isso ai do título. Amo o Processing, é uma relação muito linda, mas os pointers sempre mexeram com os meus sentimentos, e eu tenho medo de me comprometer sem ter todas essas experiências da juventude...

Tentei usar Code::Blocks, até compilei algumas vezes, mas depois adicionei um outro arquivo e o troço desando.
Se você manjar muito desse IDE, puder da uma olhadinha na thread q eu fiz la no stackOverflow...

Agora to mexendo com makefiles.
Eis aqui ela:

CC = gcc

OBJS
= space.c vec2d.c

INCLUDE_PATHS
= -IC:/SDL/SDL2-2.0.9/i686-w64-mingw32/include/SDL2
INCLUDE_PATHS
= -IC:/SDL/SDL2_image-2.0.4/i686-w64-mingw32/include/SDL2
LIBRARY_PATHS
= -LC:/SDL/SDL2-2.0.9/i686-w64-mingw32/lib
LIBRARY_PATHS
= -LC:/SDL/SDL2_image-2.0.4/i686-w64-mingw32/lib


#COMPILER_FLAGS specifies the additional compilation options we're using
# -w suppresses all warnings
# -Wl,-subsystem,windows gets rid of the console window
COMPILER_FLAGS
= -w -Wl,-subsystem,windows

LINKER_FLAGS
= -lmingw32 -lSDL2main -lSDL2 -lSDL2_image

OBJ_NAME
= Space

#This is the target that compiles our executable
all
: $(OBJS)
    $
(CC) $(OBJS) $(INCLUDE_PATHS) $(LIBRARY_PATHS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME)

E ela me da o erro que SDL.h não foi achado.
Claro que já conferi os caminhos mil vezes, e a existência desse arquivo lá na pasta.
Já mudei o #include lá no .c de todas as maneiras também.
alguma luz? Beijos.

Orange

unread,
Feb 10, 2019, 9:02:49 PM2/10/19
to hacker...@googlegroups.com
Ois.

No Code::Blocks eu não posso opinar, pois não conheço.

No caso do Makefile, a segunda definição da variável INCLUDE_PATHS está
sobrescrevendo a primeira, correto? Caso você queira trabalhar com o
conteúdo das duas linhas, o correto seria:

INCLUDE_PATHS = -IC:/SDL/SDL2-2.0.9/i686-w64-mingw32/include/SDL2
INCLUDE_PATHS += -IC:/SDL/SDL2_image-2.0.4/i686-w64-mingw32/include/SDL2

(perceba o "+=" ao invés de "=" no caso da segunda opção).

Além disso, certifique-se que no seu programa você está usando:

#include <SDL.h> /* correto, neste caso */

Ao invés de:

#include "SDL.h" /* errado, neste caso */

Será que ajuda?

On Sun, Feb 10, 2019 at 01:15:14PM -0800, Introscopia wrote:
>Oi.
>É isso ai do título. Amo o Processing, é uma relação muito linda, mas os
>pointers sempre mexeram com os meus sentimentos, e eu tenho medo de me
>comprometer sem ter todas essas experiências da juventude...
>
>Tentei usar Code::Blocks, até compilei algumas vezes, mas depois adicionei
>um outro arquivo e o troço desando.
>Se você manjar muito desse IDE, puder da uma olhadinha na thread q eu fiz
>la no stackOverflow
><https://stackoverflow.com/questions/54593892/codeblocks-fails-to-create-and-to-find-obj-files-no-such-file-or-directory>
>...
>
>Agora to mexendo com makefiles.
>Eis aqui ela:
>
>CC = gcc
>
>OBJS = space.c vec2d.c
>
>INCLUDE_PATHS = -IC:/SDL/SDL2-2.0.9/i686-w64-mingw32/include/SDL2
>INCLUDE_PATHS = -IC:/SDL/SDL2_image-2.0.4/i686-w64-mingw32/include/SDL2
>LIBRARY_PATHS = -LC:/SDL/SDL2-2.0.9/i686-w64-mingw32/lib
>LIBRARY_PATHS = -LC:/SDL/SDL2_image-2.0.4/i686-w64-mingw32/lib
>
>
>#COMPILER_FLAGS specifies the additional compilation options we're using
># -w suppresses all warnings
># -Wl,-subsystem,windows gets rid of the console window
>COMPILER_FLAGS = -w -Wl,-subsystem,windows
>
>LINKER_FLAGS = -lmingw32 -lSDL2main -lSDL2 -lSDL2_image
>
>OBJ_NAME = Space
>
>#This is the target that compiles our executable
>all : $(OBJS)
> $(CC) $(OBJS) $(INCLUDE_PATHS) $(LIBRARY_PATHS) $(COMPILER_FLAGS) $(
>LINKER_FLAGS) -o $(OBJ_NAME)
>
>E ela me da o erro que SDL.h não foi achado.
>Claro que já conferi os caminhos mil vezes, e a existência desse arquivo lá
>na pasta.
>Já mudei o #include lá no .c de todas as maneiras também.
>alguma luz? Beijos.
>
>--
>-... . . -..- -.-. . .-.. .-.. . -. - - --- . .- -.-. .... --- - .... . .-.
>Regras da Lista: https://garoa.net.br/wiki/Lista:LeiaAntesDeClicarNoSend
>Para mais informações sobre o Garoa Hacker Clube acesse https://garoa.net.br
>Mais opções do Google Groups, visite: https://groups.google.com/group/hackerspacesp
>.--. .- .-. .- -- .- .. ... .. -. ..-. --- .-. -- .- . ... .- -.-. . ... ... . --- .-- .. -.- ..
>Epoch 0 <=> Fundação: 1298244863 s ~ 2.408064*10^52 tP (tempos de Planck)
>---
>Você está recebendo esta mensagem porque se inscreveu no grupo "Garoa Hacker Clube" dos Grupos do Google.
>Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para hackerspaces...@googlegroups.com.


--
Orange

Introscopia

unread,
Feb 11, 2019, 7:42:33 AM2/11/19
to Garoa Hacker Clube
Ahh, valeu. Rodo aqui.
Bem óbvio em retrospecto, né!
Mas, claro, não adianta tentar adivinhar, tem que saber como funciona. Essas makefiles são o que exatamente? É alguma linguagem, ou é só uns protocolos do compilador mesmo?

Agora é só programar... já apareceu uns bugs alucinantes aqui hehehhe... Vou postando updates

Orange

unread,
Feb 11, 2019, 9:01:22 AM2/11/19
to hacker...@googlegroups.com
On Mon, Feb 11, 2019 at 04:42:33AM -0800, Introscopia wrote:
>Essas makefiles são o que exatamente? É alguma linguagem, ou é só uns
>protocolos do compilador mesmo?

No início, existiam os compiladores. O problema é que os programas
foram crescendo e dava muito trabalho compilar cada arquivo na mão. Aí
criaram os Makefiles para automatizar essa parte.

O make lê arquivos Makefile que são uma linguagem sim, mas uma linguagem
declarativa com regras de como compilar o seu programa. Muita gente
acha que é shell script mas, apesar de ter shell script embutido, ele é
uma linguagem própria. Por exemplo:

hello_world: hello_world.c
gcc -o $@ $<

Será compilado o programa "hello_world" tendo como referência o arquivo
"hello_world.c".

Aí você me pergunta: por que não um shell script comum? A grande
vantagem está para projetos mais grandes, pois o *target* (no caso,
"hello_world") só será compilado novamente se os sources (no caso,
"hello_world.c") for modificado, senão ele não compila novamente. Ele
faz isso comparando o tempo de modificação do target com o source.
Imagina se você tem um software com mil, dez mil targets e a cada vez
que você chama o make ele compila tudo de novo... Mas os Makefiles tem
muito mais recursos do que esse que eu mostrei acima (um dos que eu acho
mais úteis, por exemplo, é a possibilidade de construir targets em
paralelo).

Até dá pra fazer a mesma coisa com shell script (compilar somente o que
é necessário), mas daria bastante trabalho.

Conforme foi passando o tempo as aplicações e sistemas operacionais
foram ficando ainda mais complexos e hoje é pouco comum que um Makefile
seja escrito "na mão" para projetos muito grandes. Normalmente se usa
geradores de Makefiles com GNU automake (junto com GNu autoconf), CMake,
qmake, etc... tem vários.

Muitas IDEs acabam usando, por debaixo dos panos, Makefiles, shell
scripts, compiladores e depuradores que dá pra usar de maneira muito
mais simples pela linha de comando. A IDE pode ajudar, mas quando ela
se torna um obstáculo para o desenvolvimento, pode ser o momento de
voltar às origens e estudar as ferramentas básicas (a ideia é assim: não
adianta você tentar usar um torno mecânico CNC se não sabe colocar uma
broca numa furadeira...).

Tem vários tutoriais de Makefile na web. O último que eu vi é esse
aqui: https://matthias-endler.de/2017/makefiles/ Não cheguei a lê-lo,
mas parece bom para iniciantes.

John F

unread,
Feb 11, 2019, 3:47:17 PM2/11/19
to hacker...@googlegroups.com
Bela cronica das makefiles! Obrigado.
Vou dar uma olhadinha nesse tutorial também, valeu.
Enquanto isso, ja saiu uma navezinha que voa pela tela.
Tentando chegar ao ponto onde chegamos na oficina do Processing Community Day esse ano.
(https://introscopia.github.io/en/Game_Development/Jogo_de_Nave.pde)

--
-... . . -..- -.-. . .-.. .-.. . -. - - --- . .- -.-. .... --- - .... . .-.
Regras da Lista: https://garoa.net.br/wiki/Lista:LeiaAntesDeClicarNoSend
Para mais informações sobre o Garoa Hacker Clube acesse  https://garoa.net.br
Mais opções do Google Groups, visite: https://groups.google.com/group/hackerspacesp
.--. .- .-. .- -- .- .. ... .. -. ..-. --- .-. -- .- . ... .- -.-. . ... ... . --- .-- .. -.- ..
Epoch 0 <=> Fundação: 1298244863 s ~ 2.408064*10^52 tP  (tempos de Planck)
---
Você recebeu esta mensagem porque está inscrito em um tópico do grupo "Garoa Hacker Clube" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/hackerspacesp/CNkxxaqcmWA/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para hackerspaces...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages