Kate Editor LSP 클라이언트: 컴파일을 위해 "입력 파일"을 지정하는 방법이 있습니까?

Kate Editor LSP 클라이언트: 컴파일을 위해 "입력 파일"을 지정하는 방법이 있습니까?

대상: A와 B라는 두 개의 c 파일이 있고 B를 객체 파일로 컴파일하지 않고 A에 직접 포함하려는 경우 clangd(또는 Kate와 함께 사용되는 다른 LSP 서비스)는 Do I만 알릴 수 있습니다. A를 직접 컴파일할 때 B에 오류가 발생합니까? 즉, A는 B의 컴파일 오류에 대한 "입력 파일"입니다.

표준 포함 관행에 대한 거부에 대해 이야기해 주세요.

가장 간단한 예: 이것이 main.c라고 가정합니다.

#include <stdio.h>
#include "test.c"

int main() {
    test();
    return 0;
}

test.c는 다음과 같습니다

void test() {
    printf("Hello world!\n");
}

test.c를 객체 파일로 컴파일하면 다음 오류가 발생합니다.

> clang -c test.c -o test
test.c:2:5: warning: implicitly declaring library function 'printf' with type 'int (const char *, ...)' [-Wimplicit-function-declaration]
printf("Hello world!\n");
^
test.c:2:5: note: include the header <stdio.h> or explicitly provide a declaration for 'printf'

물론 Kate의 LSP 서버는 이를 알아차리고 test.c에서 "printf"를 강조 표시하여 수정합니다.

이제 test.c를 별도로 컴파일할 계획이 없다고 가정해 보겠습니다. 나는 단지 실행하고 싶다 :

clang main.c

stdio가 main.c에 포함된 후에는 test.c도 포함되므로 컴파일 시 오류가 발생하지 않습니다. 따라서 LSP 서버가 나에게 보여준 printf 경고(test.c의 컴파일 기능에 대한 독립 실행형 데모로는 유용하지만)는 내가 어떻게 프로그램을 컴파일하게 되었는지에 아무런 영향을 미치지 않았습니다.

이 경우 LSP 서버에 main.c만 컴파일하도록 지시한 다음(main.c를 컴파일의 "진입점"으로 생각) kate가 main 컴파일로 인해 발생하는 test.c의 오류만 강조 표시하도록 할 수 있습니다. 씨? 특정 예에서는 test.c에서 오류가 강조 표시되지 않습니다.

또한 "진입점"의 정의는 일반적으로 일부 컴파일 선택이 아닌 런타임 진입점을 나타내기 때문에 무시할 수도 있지만, 내가 요구하는 이름이 있는 경우 그것이 무엇인지 잘 모르겠습니다.

답변1

내가 생각할 수 있는 유일한 방법은 compile_commands.json데이터베이스를 수동으로 수정하고 데이터베이스에서 두 번째 파일을 제외하는 것입니다.

또는 clangd구성을 통해 이 작업을 수행할 수 있습니다.여기.

관련 정보