Usando makefile local para CLion em vez de CMake

148

Existe uma maneira de configurar o CLion para usar um makefile local para compilar código, em vez do CMake? Não consigo encontrar o caminho a partir das opções de compilação.

hlin117
fonte

Respostas:

142

Atualização: se você estiver usando o CLion 2020.2, ele já será compatível com Makefiles. Se você estiver usando uma versão mais antiga, continue a ler.


Embora atualmente apenas o CMake seja suportado, você pode instruir o CMake a ligar makecom seu costume Makefile. Edite a CMakeLists.txtadição de um destes dois comandos:

Quando você diz CLionpara executar seu programa, ele tenta encontrar um executável com o mesmo nome do destino no diretório apontado por PROJECT_BINARY_DIR. Portanto, desde que você makegere o arquivo onde CLionespera, não haverá problema.

Aqui está um exemplo de trabalho:

Diga CLionpara passar seu $ (PROJECT_BINARY_DIR) paramake

Esta é a amostra CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.4)
project(mytest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

add_custom_target(mytest COMMAND make -C ${mytest_SOURCE_DIR}
                         CLION_EXE_DIR=${PROJECT_BINARY_DIR})

Diga ao make para gerar o executável no CLion'sdiretório

Esta é a amostra Makefile:

all:
    echo Compiling $(CLION_EXE_DIR)/$@ ...
    g++ mytest.cpp -o $(CLION_EXE_DIR)/mytest

Isso é tudo, você também pode querer alterar o diretório de trabalho do seu programa para que ele seja executado como é quando você executa o make de dentro do diretório. Para esta edição:Run -> Edit Configurations ... -> mytest -> Working directory

Daniel
fonte
Ainda não tentei sua sugestão acima, mas seria capaz de executar meus programas C / C ++ no CLion se o fizesse? (Isso tornaria o processo de depuração uma tonelada mais fácil.)
hlin117
3
Eu verifiquei que a solução da @ Mondkin funciona. Se você estiver com problemas para criar o projeto após modificar o Makefilee CMakeLists.txt, tente modificar um *.cpparquivo. Isso faria com que o CLion construísse tudo do zero.
precisa saber é o seguinte
Isso funciona, mas quando tentei adicionar "make clean" à configuração, ele falhou.
275 de
1
Para fazer isso funcionar, pelo menos em alguns projetos (por exemplo, redis), você deve adicionar um 'ALL', tornando-o: add_custom_target (mytest ALL COMMAND make -C $ {mytest_SOURCE_DIR} CLION_EXE_DIR = $ {PROJECT_BINARY_DIR} )
Decker
1
o que eu deveria mudar para torná-lo trabalhar com gcc para C
Romain-p
33

Embora essa seja uma das solicitações de recurso mais votadas , há um plugin disponível, por Victor Kropp , que adiciona suporte aos makefiles:

Plug-in de suporte de makefile para IntelliJ IDEA

Instalar

Você pode instalar diretamente do repositório oficial:

Configurações> Plug-ins> procure makefile> Pesquise em repositórios> Instalar> Reinicie

Usar

Existem pelo menos três maneiras diferentes de executar:

  1. Clique com o botão direito do mouse em um makefile e selecione Executar
  2. Abra o makefile no editor, coloque o cursor sobre um alvo (em qualquer lugar da linha), pressione alt+ entere selecione make target
  3. Aperte ctrl/ cmd+ shift+ F10em um alvo (embora este não funcionou para mim em um mac).

Ele abre um painel chamado Executar destino com a saída.

eu liderei
fonte
2
Apenas um aviso, se você seguir esse caminho, certifique-se de entrar em settings-> make e certifique-se de apontar o plug-in para o diretório de instalação do make. Por padrão, ele aparece em / usr / bin / make
Taylor Liss
5
Eu tentei o seu método, mas isso dá apenas a oportunidade de criar seu projeto, certo? Não consigo executar um aplicativo que foi criado com make com este plug-in, ou sinto falta de algo? Eu tenho um projeto que tem um Makefile bastante complexa e eu não quero escrever um arquivo CMake para ele, mas eu gostaria de depurá-lo usando CLION ...
blacktemplar
@blacktemplar Não sei se você pode usar todas as ferramentas de depuração do CLion, mas devo poder compilar e depurar um arquivo binário criado com o método acima. Eu apenas brinquei um pouco com ele e pude usar os botões de controle de passos, por exemplo.
iled
2
Para configurações mais complexas, isso é muito mais fácil do que a resposta aceita. Editar o makefile apenas para executar esse makefile é loucura!
Kevin
1
Como você executou o binário gerado no clion? Eu crio uma nova configuração para o Aplicativo e, em seguida, destino: Todos os destinos, Executável: nome do binário, mas recebo este erro: "Não é possível executar binaryem <padrão>" # #
Kennet Celeste
7

A versão mais recente oferece suporte melhor literalmente a qualquer Makefiles gerado, através do compiledb

Três etapas:

  1. instalar compiladob

    pip install compiledb
    
  2. faça uma marca seca

    compiledb -n make 
    

    (faça o autogen, configure se necessário)

  3. haverá um arquivo compile_commands.json gerado, abra o projeto e você verá que o CLion carregará informações do arquivo json. Se o seu CLion ainda tentar encontrar o CMakeLists.txt e não conseguir ler o compile_commands.json, tente remover a pasta inteira, faça novamente o download dos arquivos de origem e refaça a etapa 1,2,3

Postagem original: Trabalhando com Makefiles no CLion usando o Compilation DB

Fengggli
fonte
1
Bom, o Jetbrains está trabalhando no problema, mas a partir de 16 de novembro de 2018 não é útil porque você não pode depurar o executável gerado.
Gerardw #
3

Para evitar totalmente o uso do CMAKE, você pode simplesmente:

  1. Crie seu projeto normalmente com o Make através do terminal.

  2. Altere suas configurações do CLion, vá para (na barra superior):
    Run -> Edit Configurations -> yourProjectFolder

  3. Mude Executablepara o gerado com Make

  4. Altere Working directorypara a pasta que contém seu executável (se necessário)

  5. Remova a Buildtarefa na Before launch:Activate tool windowcaixa

E está tudo pronto! Agora você pode usar o botão de depuração após a compilação manual.

13013SwagR
fonte
1
Minha configuração, como você descreveu, diz "Nada para construir", mesmo que o executável esteja definido e exista.
burro
Isso está certo. Você deve construir manualmente e depois executar (sem construir). Observe que a versão mais recente do CLion parece suportar melhor o MakeFiles. Esta solução ainda funciona, mas eu gostaria de considerá-lo como Reprovado
13013SwagR
O que você sugeriria para a versão mais recente? Eu tenho o plug-in makefile, mas ele não lida com compilação / depuração.
burro
Você deve ser capaz de compilar e eu acho que depuração também com o plugin Makefile. Veja o Clion Doc. . No entanto, sugiro que você use o CMake, que é totalmente suportado e evita todos os problemas. Você também pode configurá-lo (acho) com o Modelo de depuração remota ou usar o GDB diretamente no console.
13013SwagR
1

Atualmente, apenas o CMake é suportado pelo CLion. Outros sistemas de compilação serão adicionados no futuro, mas atualmente, você só pode usar o CMake.

Uma ferramenta importadora foi implementada para ajudá-lo a usar o CMake.

Editar:

Fonte: http://blog.jetbrains.com/clion/2014/09/clion-answers-frequently-asked-questions/

GauthierPLM
fonte
Vendo que este post foi para fora por um mês agora, e esta é a única resposta, eu estou convencido de que você está correto, infelizmente ...
hlin117
Indo mais fundo na origem do comentário, eu encontrei este: youtrack.jetbrains.com/issue/CPP-494#tab=Comments
hlin117
e se você não quiser usar o cmake?
Enerccio 30/01
1

Não estou muito familiarizado com o CMake e não podia usar a solução da Mondkin diretamente.

Aqui está o que eu criei no meu CMakeLists.txt usando a versão mais recente do CLion (1.2.4) e MinGW no Windows (acho que você precisará substituir tudo: g ++ mytest.cpp -o bin / mytest por make if você não está usando a mesma configuração):

cmake_minimum_required(VERSION 3.3)
project(mytest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

add_custom_target(mytest ALL COMMAND mingw32-make WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})

E o Makefile personalizado é assim (está localizado na raiz do meu projeto e gera o executável em um diretório bin):

all:
    g++ mytest.cpp -o bin/mytest

Eu sou capaz de criar o executável e os erros na janela de log são clicáveis.

As dicas no IDE são bastante limitadas, o que é uma grande limitação em comparação aos projetos puros do CMake ...

Jérémy
fonte
Isso funcionou para mim. Consegui fazer com que o CLion reconhecesse meus arquivos de origem como "ativos" incluindo todos eles no meu set(SOURCE_FILES all_files_here.c)e adicionando add_executable(foobar_cmake ${SOURCE_FILES})além do destino personalizado. Depois, verifique se o CLion está configurado para criar / executar seu destino personalizado e não o _cmake.
Kevin Mark