윈도우 SDK와 커맨트 프롬프트를 이용한 C++ 프로젝트 컴파일하기

2023. 2. 26. 01:52프로그래밍

728x90

 

 

윈도우 SDK와 커맨트 프롬프트를 이용한 C++ 프로젝트 컴파일하기

3분만 퀵하게 : 윈도우 SDK와 커맨트 프롬프트를 이용한 C++ 프로젝트 컴파일하기1   해보고...

blog.naver.com

해보고 싶었지만...오랫동안 해보지 못했던...

마이크로소프트가 제공하는 컴파일러를 사용해서 윈도우 프로그램을 해보고 싶다는 욕구를 충족 시켜 줄만한 글인 듯 하다.

 

다음은 글 본문 임

"Visual Studio를 설치하지 않고 Windows에서 C ++ 프로젝트를 어떻게 구축 하나요?"라는 몇 가지 질문을 받았습니다. 이 비디오는 프로세스를 보여 주지만 몇 가지 간단한 단계만으로 설명해 줍니다:

 

  • Windows SDK 다운로드 인스톨*
  • Windows SDK 커맨드 프롬프트 실행**
  • 프로젝트 폴더 찾아가기
  • vcupgrade <projectname>.vcproj” 실행
  • “msbuild <projectname>.vcxproj” 실행

*인스톨러의 Windows Native Code Development 섹션이 체크되어 있어야 합니다.

 

** 가장 좋은 방법은 아니지만 프로젝트가 SDK에서 바로 빌드될 수 있음을 보여주고 싶어서 데모를 할 때 명령 프롬프트에 대한 권한을 높였습니다. 폴더를 내 데스크탑으로 복사했다면, 권한이 부여된 Windows SDK 커맨드 프롬프트를 실행 할 필요가 없었을 것입니다.

이 작업은 자신의 컴퓨터에서 자동화 된 빌드를 수행하거나 빌드 서버와 같이 Visual Studio가 필요로 하지 않는 컴퓨터에서 빌드를 수행해야 하는 경우에 유용한 것이지, Visual Studio를 통한 개발을 대신 할 수 있는 대체용 솔루션은 아닙니다.

 

Windows SDK를 사용하여 빌드하는 방법에 대한 자세한 내용은 Microsoft Windows SDK 블로그를 참조하십시오. Windows 개발자 센터에 대한 업데이트는 The See Also 블로그를 참조하십시오.

 

그럼 위의 내용을 바탕으로 한 번 개발 환경을 만들어 보기로 하자.

 

1. 설치하기

그럼 위의 내용을 바탕으로 우선 내 컴퓨터를 점검해 보도록 한다.

내 컴퓨터에서 필요 한 것은 다음과 같은 오류 메시지 비슷한 것을 만나면서부터 시작 될 것이다.

눈여겨 볼만한 메시지가 나온다. 여러가지 시행 착오 끝에

닷넷 4를 다운 받고, 설치 한다. 그 내용을 담고 있는 스택오버플로우 내용은 아래 링크에 있다.

 

 

Windows SDK 7.1 Setup failure

I am trying to install Windows SDK for Windows 7 with .NET Framework 4 but when I open the setup I receive an error: Some Windows SDK components require the RTM .NET Framework 4. Setup detecte...

stackoverflow.com

설치하도록 한다.

그리고 난 다음 윈도우 SDK를 설치하도록 한다.

 

 

 

대표 설치 옵션은 아래와 같이 해 주면 될 듯하다.

 

2. 실행하기

 

 

3. 샘플 구동하기

C:\Program Files\Microsoft SDKs\Microsoft SDKs\Windows\v7.1\Samples
C:\Program Files\Microsoft SDKs\Microsoft SDKs\Windows\v7.1\Samples\begin\dll
 

실행 해보면,

 

무슨 오류 인지는 모르겠으나 일단 컴파일하고 빌드가 되는 것으로 보임.

한번 더 구동 해 주면 된다.

 

샘플은 구동하여 보았으니… 다음 함수를 넣어서 컴파일 해 보도록 한다.

사실 이 모든 것이 아래 함수등을 한번 구동해보고 싶어서 나온 욕심 일 수도 있다.

MinGW 환경은 사실 진짜 윈도우 환경은 아니라고 생각하니까...

void Disable_WFP() {
	hmod=LoadLibrary("sfc_os.dll");
	CPP SetSfcFileException;
	// the function is stored at the fifth ordinal in sfc_os.dll
	SetSfcFileException=(CPP)GetProcAddress(hmod,(LPCSTR)5);
	SetSfcFileException(0, L"c:\\windows\\system32\\calc.exe",-1);
	// Now we can modify the system file in a complete stealth.
}
 

위 함수에 대한 설명은 다음 사이트2에 있다.

이 함수로 뭘 할 수 있을 지 생각해보고 있는 중이다…

 

전체 코드는 다음과 같이 만들어 보았다. 사실 코드도 없지만....

그리고 이건 C++이 아님을 밝혀야 할 듯 그냥 C++ 컴파일러로 컴파일을 한것으로

정정하자...

#include "windows.h"

typedef DWORD(__stdcall *CPP) (DWORD param1, PWCHAR param2, DWORD param3);

void Disable_WFP() {
	HANDLE hmod=LoadLibrary("sfc_os.dll");
	CPP SetSfcFileException;
	// the function is stored at the fifth ordinal in sfc_os.dll
	SetSfcFileException=(CPP)GetProcAddress(hmod,(LPCSTR)5);
	SetSfcFileException(0, L"c:\\windows\\system32\\calc.exe",-1);
	// Now we can modify the system file in a complete stealth.
}


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

Makefile도 만들어 준다... 물론 샘플 디렉토리를 뒤져서 아무거나 맘에 드는 놈을 구해서 베끼고, 약간 수정 해 준 버전이다.

# Nmake macros for building Windows 32-Bit apps
!include <win32.mak>

all: $(OUTDIR) $(OUTDIR)\calc_wfp.exe

#----- If OUTDIR does not exist, then create directory
$(OUTDIR) :
if not exist "$(OUTDIR)/$(NULL)" mkdir $(OUTDIR)

# Update the object files if necessary

$(OUTDIR)\calc_wfp.obj: calc_wfp.c
$(cc) $(cflags) $(cvarsdll) $(cdebug) /Fo"$(OUTDIR)\\" /Fd"$(OUTDIR)\\" calc_wfp.c

$(OUTDIR)\calc_wfp.exe: $(OUTDIR)\calc_wfp.obj
$(link) $(linkdebug) -out:$(OUTDIR)\calc_wfp.exe $(OUTDIR)\calc_wfp.obj $(guilibsdll)

#--------------------- Clean Rule --------------------------------------------------------
# Rules for cleaning out those old files

clean:
$(CLEANUP)
 

 

컴파일하고

구동은 뭐… 안 해도 될 듯… 그래서 결론은 60초 동안 제어권을 얻어온다는 말인지는 확실치 않다.

음... 내가 알기로는 모든 개발이 다 될 수 있을 듯 하기는 한데..

설마 이걸로 윈도우

개발에 뛰어든다는 말을 하기에는 인생이 너무 짧을 수 있을 듯...

대신에, 한가지 말 할 수 있는 것은.. 강력한 툴은 만들 수 있지 않을까?

이상.


728x90