내 소프트웨어에는 정상적인 사용을위한 메인과 유닛 테스트를위한 메인이 있습니다. gcc가 사용할 "main"기능을 지정하는 옵션이 있다면 좋겠다.
- 답변 # 1
- 답변 # 2
여기서 다른 대답은 상당히 합리적이지만 실제로 말한 문제는 실제로 GCC가 아니라 C 런타임에 관한 것입니다.
와이즈 비즈 와이즈 비즈-e
를 사용하여 프로그램의 진입 점을 지정할 수 있습니다ld
에 깃발 . 내 문서에는 다음과 같이 말합니다.메인 실행 파일의 진입 점을 지정합니다. 기본적으로 항목 이름은 "start"이며 crt1.o에 있으며 글루 코드가 포함 된 main ()을 설정하고 호출해야합니다.
즉, 원하는 경우 진입 점을 무시할 수 있지만
이후 시스템에서 정상적으로 실행하려는 C 프로그램에 대해서는 시작점을 원하지 않을 수 있습니다. 프로그램이 실행되기 전에 필요한 모든 종류의 OS 관련 작업을 수행 할 수 있습니다. 자신의
-e symbol_name
를 구현할 수 있다면 , 원하는 것을 할 수 있습니다. - 답변 # 3
Make 또는 이와 유사한 것을 사용하고 있다고 가정합니다. 나는 main 함수의 다른 구현을 포함하는 두 개의 파일을 만든 다음 makefile에서 하나는 "unit test main"을 사용하고 다른 하나는 "normal main"을 제외하고 나머지 파일에 대해 동일한 종속성을 갖는 두 개의 별도 대상을 정의합니다. ". 다음과 같은 것 :
start
"normal"타겟이 makefile의 상단에 가까이있는 한 "make"를 입력하면 기본적으로 선택됩니다. 테스트 대상을 만들려면 "make unittest"를 입력해야합니다.
- 답변 # 4
매크로를 사용하여 하나의 함수 이름을 main으로 바꿀 수 있습니다.
start
- 답변 # 5
다른 파일을 사용하고 테스트 및 프로덕션 빌드에 사용하는 경향이 있지만 파일이 있으면
normal: main_normal.c file1.c file2.c unittest: main_unittest.c file1.c file2.c
그리고
#ifdef TESTING #define test_main main #else #define real_main main #endif int test_main( int argc, char *argv[] ) { ... } int real_main( int argc, char *argv[] ) { ... }
그런 다음 메인을 선택하는 컴파일러 옵션은
int test_main (int argc, char*argv[])
입니다. 그리고int prod_main (int argc, char*argv[])
-Dtest_main=main
관련 자료
- javascript - 다른 페이지에서 x-show 상태를 변경하는 방법이 있습니까?
- swiftui - onLongPressGesture에 의해 켜짐/꺼짐 상태에 세 번째 토글 옵션을 추가하는 방법이 있습니까?
- vba - Excel의 드롭 다운 메뉴에 옵션에 대한 설명을 표시하는 방법이 있습니까?
- WooCommerce 대시 보드 메뉴 옵션 이름을 Shop으로 변경
- javascript - 선택 옵션에서 문자열 변경
- javascript - vue - 선택한 옵션에 따라 경로를 변경하고 요소에 기본 선택된 옵션을 표시하는 방법은 무엇입니까?
- c# - XAML 만 사용하여 자체 텍스트를 기반으로 Texblock 전경을 변경하는 방법이 있습니까?
- google sheets - 일반 vlookup 수식을 배열 수식으로 변경할 가능성이 있습니까?
- Svelte의 구독 상점에 값이 변경 될 때 함수를 트리거하는 방법은 무엇입니까?
- html - 이미지 변경시 선택 옵션을 변경하는 JavaScript
- command line - Mac Catalina에서 읽기 전용 파일 시스템을 쓰기 가능한 파일 시스템으로 변경하는 방법이 있습니까?
- ag grid - AdapTable 컨텍스트 메뉴에는 셀 값에 따라 레이블 텍스트를 변경하는 방법이 있습니다
- php - 무시 옵션과 함께 insertUsing이 있습니까?
- visual studio code - VSCode에서 Vue 지시문의 색상 만 변경하는 방법이 있습니까?
- html - 포장시 상품의 순서를 변경할 수 있나요?
- jquery - 선택 옵션을 변경할 때 입력 값을 변경하는 방법은 무엇입니까?
- python - Google Colab의 Google 스프레드 시트에서 게시 된 CSV를 읽는 데 변경 사항이 있나요?
- java - 이 모든 if/else 문이 필요하지 않도록 내가 호출하는 파일 이름을 변경하는 방법이 있습니까?
- javascript - 새 옵션을 선택하자마자 html 요소의 텍스트 내용을 변경하는 방법은 무엇입니까?
- dart - flutter - 하나의 텍스트 필드에서 hinttext의 색상을 변경할 수있는 방법이 있습니까?
- c : 32비트에서 누락된 sys 폴더
- c++ : 포인터 변수를 선언하기 위해 메모리는 포인터의 이름이나 포인터의 주소에 할당됩니까?
- c : 피연산자 뒤에 쉼표, 콜론, 데코레이터 또는 줄 끝이 예상됨
- avr-gcc: EEMEM과 함께 __attribute__((address))를 사용하는 방법은 무엇입니까?
- 어떤 경우에 __sync_synchronize가 인수를 수신합니까?
- c++ : Windows 10의 64비트 gcc에서 32비트 EXE용으로 컴파일할 수 없음
- c : 비트 형식과 비비트 형식 간의 변환 사용법
- c++ : centos7에 GCC gcc-5.4.0 빌드
- c : 컴파일러가 전처리 단계에서 수행할 작업에 대한 자세한 단계는 어디에서 찾을 수 있습니까?
- __attribute__((section("name"))) 사용법?
파일을 별도의 파일에 넣고, 일반적으로 사용할 수있는 하나의 .c 파일과 테스트를 위해 하나의 .c 파일을 지정하십시오.
또는
#define
테스트 빌드를 사용하여 명령 줄에서 테스트하고 다음과 같은 것을 사용하십시오.