function! build#dir(dir) abort let l:cwd = getcwd() let $BUILD_DIR = l:cwd.'/'.a:dir let g:ycm_clangd_args = ['--compile-commands-dir='.$BUILD_DIR] YcmRestartServer endfunction function! build#targets(ArgLead, CmdLine, CursorPos) abort let l:targets = [] if filereadable($BUILD_DIR.'/build.ninja') for l:target in split(system('ninja -C '.$BUILD_DIR.' -t targets'), '\n') call add(l:targets, substitute(l:target, ':.*$', '', '')) endfor elseif filereadable($BUILD_DIR.'/Makefile') " TODO: support make endif return join(l:targets, "\n") endfunction function! build#run(...) abort let l:build_dir = substitute($BUILD_DIR, '\/$', '', '') if filereadable($BUILD_DIR.'/build.ninja') execute 'terminal ninja -C '.l:build_dir.' '.join(a:000, ' ') elseif filereadable($BUILD_DIR.'/Makefile') execute 'terminal make -C '.l:build_dir.' '.join(a:000, ' ') endif endfunction