C/C++ Linux vs Windows [RESOLVIDO]

1. C/C++ Linux vs Windows [RESOLVIDO]

Bruno
uNclear

(usa Slackware)

Enviado em 16/08/2016 - 20:53h

Queria saber se existe algo no windows parecido com o GNU make para dev em c/c++?
E queria também saber a opinião de vocês, se c/c++ é considerado multiplataforma mesmo tendo que ser recompilado para cada s.o.

Obrigado!!


  


2. MELHOR RESPOSTA

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 17/08/2016 - 13:39h

A estrutura de um script CMake é diferente de um Makefile, é uma linguagem de script a parte. A vantagem é a saída, podendo ser um Makefile ou outro script de build.

Digamos que eu queira construir o famigerado "Hello World", então eu preciso de um arquivo com essa receita:

main.cpp

#include <iostream>
int main() {
std::cout << "Hello World\n";
return 0;
}


CMakeLists.txt

cmake_minimum_required (VERSION 2.8)
project (HelloWorld)
add_executable(HelloWorld main.cpp)


Em seguida, executamos o cmake sobre esta receita, e por estarmos no Linux, será gerado uma saída baseada em Makefile, com isso, apenas invocamos o make


$ > cmake .
-- The C compiler identification is GNU 5.3.0
-- The CXX compiler identification is GNU 5.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/uilian.ries/Development/cpp/Hello
$ > ls
CMakeCache.txt CMakeFiles cmake_install.cmake CMakeLists.txt main.cpp Makefile
$ > make
Scanning dependencies of target HelloWorld
[100%] Building CXX object CMakeFiles/HelloWorld.dir/main.cpp.o
Linking CXX executable HelloWorld
[100%] Built target HelloWorld
$ > ./HelloWorld
Hello World


Veja que executei o make sem nem ter escrito o Makefile, tudo sendo gerado pelo CMake.

Quais as outras plataformas suportas?
Segunda a versão 3.2.2 (não é a mais atual):

Generators

The following generators are available on this platform:
Unix Makefiles = Generates standard UNIX makefiles.
Ninja = Generates build.ninja files (experimental).
Watcom WMake = Generates Watcom WMake makefiles.
CodeBlocks - Ninja = Generates CodeBlocks project files.
CodeBlocks - Unix Makefiles = Generates CodeBlocks project files.
CodeLite - Ninja = Generates CodeLite project files.
CodeLite - Unix Makefiles = Generates CodeLite project files.
Eclipse CDT4 - Ninja = Generates Eclipse CDT 4.0 project files.
Eclipse CDT4 - Unix Makefiles = Generates Eclipse CDT 4.0 project files.
KDevelop3 = Generates KDevelop 3 project files.
KDevelop3 - Unix Makefiles = Generates KDevelop 3 project files.
Kate - Ninja = Generates Kate project files.
Kate - Unix Makefiles = Generates Kate project files.
Sublime Text 2 - Ninja = Generates Sublime Text 2 project files.
Sublime Text 2 - Unix Makefiles = Generates Sublime Text 2 project files.


Até Codeblocks é suportado.

--
Uilian Ries
Linux Counter: 521986

3. Re: C/C++ Linux vs Windows [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 16/08/2016 - 21:05h

A parte mais rasa da linguagem pode ser multiplataforma.
Agora, quando mexe-se em chamadas de sistema, trata-se no caso de coisas particulares de cada sistema.

Procure algo em seu Linux (se os arquivos deste manual estiverem instalados) algo como man 2 creat.

Você conhece Cygwin?

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



4. Re: C/C++ Linux vs Windows [RESOLVIDO]

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 16/08/2016 - 21:29h

Queria saber se existe algo no windows parecido com o GNU make para dev em c/c++?


Eu recomendo fortemente utilizar CMake. Ele serve como um pré-construtor, podendo gerar Makefile e até .proj do Visual Studio.

E queria também saber a opinião de vocês, se c/c++ é considerado multiplataforma mesmo tendo que ser recompilado para cada s.o.


Sim, altamente portável. Hoje temos um ótimo suporte dos compiladores sobre as mais diversas plataformas. Para ter noção, eu utilizo C++14 sobre PowerPC, em sistema embarcado.


--
Uilian Ries
Linux Counter: 521986


5. Re: C/C++ Linux vs Windows

Paulo
paulo1205

(usa Ubuntu)

Enviado em 16/08/2016 - 21:30h

O listeiro_037 falou em “partes mais rasas” da linguagem. Eu discordo da terminologia que ele usou.

As partes comuns são *A* linguagem e suas respectivas bibliotecas padronizadas de funções. Elas têm de funcionar de modo consistente e previsível para que se possa dizer que as linguagens são efetivamente suportadas nos sistemas X ou Y.

O que cada sistema tem de particular está fora da definição da linguagem. Tias recursos normalmente se apresentam como bibliotecas particulares de cada sistema, e um programador pode usá-las se quiser que o seu programa seja voltado para um sistema em particular, e ele tem de saber que, a partir dessa decisão, o programa pode deixar de ser facilmente portável para sistemas diferentes. O programa não deixa de ser “em C(ou C++)”, já que continua se conformando a regras sintáticas e ao modo de expressar-se dessa linguagem, mas ele deixa de ser “em C(C++) puro”, tornando-se em “C(C++) voltado para Windows (ou Linux, UNIX etc.)”.

Mas existem também bibliotecas que estão fora do padrão, mas mantém uma coesão muito grande independentemente da plataforma. O Qt, por exemplo, não é parte do padrão do C++, mas foi projetado para que suas classes permitam escrever código muito confortavelmente e de modo facilmente portável para outras plataformas (para as quais exista uma implementação de Qt, obviamente), com uma quantidade muito pequena (muitas vezes zero) de adaptações em cada plataforma destino. É verdade que cada sistema continua precisando de compilação específica para si, mas o código fonte usado em cada compilação será (quase) sempre exatamente o mesmo.


6. Re: C/C++ Linux vs Windows [RESOLVIDO]

Bruno
uNclear

(usa Slackware)

Enviado em 17/08/2016 - 12:05h

listeiro_037 escreveu:

A parte mais rasa da linguagem pode ser multiplataforma.
Agora, quando mexe-se em chamadas de sistema, trata-se no caso de coisas particulares de cada sistema.

Procure algo em seu Linux (se os arquivos deste manual estiverem instalados) algo como man 2 creat.

Você conhece Cygwin?


Nao conheço Cygwin, vou dar uma olhada no man 2 creat
Obrigado.

uilianries escreveu:

Eu recomendo fortemente utilizar CMake. Ele serve como um pré-construtor, podendo gerar Makefile e até .proj do Visual Studio.


O funcionamento e parecido com o GNU Make? Não tenho muito conhecimento com windows muito menos com Visual Studio.
Obrigado.








7. Re: C/C++ Linux vs Windows [RESOLVIDO]

Bruno
uNclear

(usa Slackware)

Enviado em 17/08/2016 - 12:07h

paulo1205 escreveu:

O listeiro_037 falou em “partes mais rasas” da linguagem. Eu discordo da terminologia que ele usou.

As partes comuns são *A* linguagem e suas respectivas bibliotecas padronizadas de funções. Elas têm de funcionar de modo consistente e previsível para que se possa dizer que as linguagens são efetivamente suportadas nos sistemas X ou Y.

O que cada sistema tem de particular está fora da definição da linguagem. Tias recursos normalmente se apresentam como bibliotecas particulares de cada sistema, e um programador pode usá-las se quiser que o seu programa seja voltado para um sistema em particular, e ele tem de saber que, a partir dessa decisão, o programa pode deixar de ser facilmente portável para sistemas diferentes. O programa não deixa de ser “em C(ou C++)”, já que continua se conformando a regras sintáticas e ao modo de expressar-se dessa linguagem, mas ele deixa de ser “em C(C++) puro”, tornando-se em “C(C++) voltado para Windows (ou Linux, UNIX etc.)”.

Mas existem também bibliotecas que estão fora do padrão, mas mantém uma coesão muito grande independentemente da plataforma. O Qt, por exemplo, não é parte do padrão do C++, mas foi projetado para que suas classes permitam escrever código muito confortavelmente e de modo facilmente portável para outras plataformas (para as quais exista uma implementação de Qt, obviamente), com uma quantidade muito pequena (muitas vezes zero) de adaptações em cada plataforma destino. É verdade que cada sistema continua precisando de compilação específica para si, mas o código fonte usado em cada compilação será (quase) sempre exatamente o mesmo.


Bastante interessante o caso do Qt, não sabia que ele era portável para várias plataformas, ta explicado o porque e tão utilizado



8. Re: C/C++ Linux vs Windows [RESOLVIDO]

Bruno
uNclear

(usa Slackware)

Enviado em 17/08/2016 - 14:35h

uilianries escreveu:

A estrutura de um script CMake é diferente de um Makefile, é uma linguagem de script a parte. A vantagem é a saída, podendo ser um Makefile ou outro script de build.

Digamos que eu queira construir o famigerado "Hello World", então eu preciso de um arquivo com essa receita:

main.cpp

#include <iostream>
int main() {
std::cout << "Hello World\n";
return 0;
}


CMakeLists.txt

cmake_minimum_required (VERSION 2.8)
project (HelloWorld)
add_executable(HelloWorld main.cpp)


Em seguida, executamos o cmake sobre esta receita, e por estarmos no Linux, será gerado uma saída baseada em Makefile, com isso, apenas invocamos o make


$ > cmake .
-- The C compiler identification is GNU 5.3.0
-- The CXX compiler identification is GNU 5.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/uilian.ries/Development/cpp/Hello
$ > ls
CMakeCache.txt CMakeFiles cmake_install.cmake CMakeLists.txt main.cpp Makefile
$ > make
Scanning dependencies of target HelloWorld
[100%] Building CXX object CMakeFiles/HelloWorld.dir/main.cpp.o
Linking CXX executable HelloWorld
[100%] Built target HelloWorld
$ > ./HelloWorld
Hello World


Veja que executei o make sem nem ter escrito o Makefile, tudo sendo gerado pelo CMake.

Quais as outras plataformas suportas?
Segunda a versão 3.2.2 (não é a mais atual):

Generators

The following generators are available on this platform:
Unix Makefiles = Generates standard UNIX makefiles.
Ninja = Generates build.ninja files (experimental).
Watcom WMake = Generates Watcom WMake makefiles.
CodeBlocks - Ninja = Generates CodeBlocks project files.
CodeBlocks - Unix Makefiles = Generates CodeBlocks project files.
CodeLite - Ninja = Generates CodeLite project files.
CodeLite - Unix Makefiles = Generates CodeLite project files.
Eclipse CDT4 - Ninja = Generates Eclipse CDT 4.0 project files.
Eclipse CDT4 - Unix Makefiles = Generates Eclipse CDT 4.0 project files.
KDevelop3 = Generates KDevelop 3 project files.
KDevelop3 - Unix Makefiles = Generates KDevelop 3 project files.
Kate - Ninja = Generates Kate project files.
Kate - Unix Makefiles = Generates Kate project files.
Sublime Text 2 - Ninja = Generates Sublime Text 2 project files.
Sublime Text 2 - Unix Makefiles = Generates Sublime Text 2 project files.


Até Codeblocks é suportado.

--
Uilian Ries
Linux Counter: 521986


Cara me ajudou muito em poucas palavras, e correto dizer que o cmake e mais simples de trabalhar do que o make? Pois pela estrutura que seu cmakelists.txt ficou, da pra perceber que voce nao teve q citar os passos de compilaçao para ele.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts