"파일경로" 파일을 "xxx.exe"(으)로 복사할 수 없습니다. 'xxx.exe' 파일은 다른 프로세스에서 사용 중이므로 프로세스에서 액세스할 수 없습니다. 


VS 버그인듯...


빌드전 이벤트에 추가


if exist "$(TargetPath).locked" del "$(TargetPath).locked"

if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"

if exist "$(TargetDir)$(TargetName).pdb.locked" del "$(TargetDir)$(TargetName).pdb.locked"

if exist "$(TargetDir)$(TargetName).pdb" if not exist "$(TargetDir)$(TargetName).pdb.locked" move "$(TargetDir)$(TargetName).pdb" "$(TargetDir)$(TargetName).pdb.locked"

블로그 이미지

란마12

,



블로그 이미지

란마12

,

http://semver.org/


독립적인 응용 프로그램 보다는 라이브러리를 위한 것인데요. 간단히 요약하면

* 버전 번호는 기본적으로 x.y.z.r 형식이고 x, y, z, r 은 숫자.

* x는 주(major) 번호로, 라이브러리가 노출하는 공개 API에 '하위 호환성 없는 변화'가 생겼을 때 증가

* y는 부(minor) 번호로, 공개 API에 '하위 호환성 있는 변화'가 생겼을 때 증가

* z는 브랜치 구분

* r은 공개 API의 변화가 없는 버그 교정이나 내부 개선 시 증가.


이 제안의 요지는, 버전 번호 변경 방식(또는 버전 번호의 '의미론')에 대한 합의가 있으면 외부 라이브러리를 사용하는 프로그램의 갱신이나 유지 보수가 쉬워진다는 것입니다. 

예를 들어 Bar라는 라이브러리의 1.2.0.3 버전을 사용해서 Foo라는 프로그램을 만들었다고 할 때, 나중에 Bar가 1.2.0.4(버그 교정)나 1.3.0.0(하위 호환성 보장)으로 갱신된 경우 Foo의 개발자는 Foo를 변경할 필요가 없음을 바로 알 수 있습니다. 소프트웨어 설치/의존성 관리 프로그램들도 이를 기계적으로 알 수 있겠고요.


https://indidev.net/forum/viewtopic.php?f=2&t=115 류광님 답글에 의견을 덧붙임

'tool > VersionControl' 카테고리의 다른 글

분산 버전 관리 시스템  (0) 2015.05.28
이름을 변경하고 뭔가 내용을 수정후 커밋할 경우 오류  (0) 2015.03.10
Ankh SVN  (1) 2012.08.21
블로그 이미지

란마12

,

로컬 버전 관리 시스템

대부분의 사람들이 버전 관리를 위해 쓰는 방법은 파일을 다른 디렉토리에 복사하는 것이다(똑똑한 사람이라면 디렉토리 이름에 시간을 넣을 것이다). 이 방법은 간단하고 자주 사용되는 방법이지만 실수가 발생하기 쉽다. 어느 디렉토리에서 작업하고 있었는지 잊어버리고 엉뚱한 파일을 덮어쓰거나 의도하지 않았던 위치로 복사할 수도 있다.

이 문제를 해결하기 위해 오래전에 프로그래머들은 간단한 데이터베이스에 파일의 변경 사항을 기록하는 로컬 버전 관리 시스템을 만들었다(그림 1-1 참조).


그림 1-1. 로컬 버전 관리 다이어그램

유명했던 VCS 도구들 중 현재에도 널리 쓰이는 것으로 RCS라 불리는 시스템이 있다. 그 예로 Mac OS X 운영체제에서는 개발 도구를 설치하면 RCS가 딸려온다. RCS의 기본적인 동작 방식은 각 리비전들 간의 패치 세트(patch set)라고 하는 데이터의 차이점들을 특별한 형식의 파일에 저장, 특정 시점의 파일 내용을 보고 싶을 때 해당 시점까지의 패치들을 모두 더하여 파일을 만들어내는 것이다.

중앙집중식 버전 관리 시스템

또 다른 문제는 시스템 외부에 있는 개발자들과 함께 작업하는 것이다. 중앙집중식 버전 관리 시스템(Centralized Version Control System; CVCS)은 이 문제를 해결하기 위해 개발됐다. CVS, Subversion, Perforce와 같은 시스템들이 여기에 속한다. CVCS에서는 버전 관리되는 모든 파일을 저장하는 하나의 서버와, 이 중앙 서버에서 파일들을 가져오는(checkout) 다수의 클라이언트가 존재한다. 오랫동안 사용된 이 방식은 지금까지도 버전 관리의 대표적인 방식이다(그림 1-2 참조).


그림 1-2. 중앙집중식 버전 관리 다이어그램

CVCS는 로컬 VCS에 비해 장점이 많다. 누구나 다른 사람들이 무엇을 하고 있는지 알 수 있고, 관리자는 누가 무엇을 할 수 있는지 꼼꼼하게 관리할 수 있다. CVCS를 관리하는 것은 수많은 클라이언트의 로컬 데이터베이스를 관리하는 것보다 훨씬 쉽다.

그러나 CVCS는 심각한 단점이 있다. 중앙 서버가 잘못되면 모든 것이 잘못된다는 점이다. 서버가 다운될 경우 서버가 다시 복구될 때까지 다른 사람과의 협업도, 진행 중이던 작업을 버전 관리하는 것도 불가능해진다. 중앙 데이터베이스가 저장된 하드디스크에 오류가 발생하고 백업도 없다면, 사람들이 각자 자신의 컴퓨터에 가지고 있던 스냅샷 외에는 그동안 쌓인 프로젝트의 이력을 모두 잃게 된다. 로컬 VCS 시스템도 같은 문제가 있다. 프로젝트의 모든 이력이 한곳에만 있을 경우 이것은 피할 수 없는 문제다.

분산 버전 관리 시스템

분산 버전 관리 시스템(Distributed Version Control System; DVCS)은 앞서 말한 문제를 해결하기 위해 개발되었다. Git, Mecurial, Bazaar, Darcs 등 DVCS에서는 클라이언트가 파일들의 마지막 스냅샷을 가져오는 대신 저장소(repository)를 통째로 복제한다. 따라서 서버에 문제가 생겨도 어느 클라이언트든 복제된 저장소를 다시 서버로 복사하면 서버가 복구된다. 체크아웃(checkout)을 할 때마다 전체 백업이 일어나는 셈이다(그림 1-3 참조).


그림 1-3. 분산 버전 관리 시스템 다이어그램

게다가 대부분의 DVCS에서는 다수의 원격 저장소(remote repository)를 갖는 것이 가능하기 때문에 동시에 여러 그룹과 여러 방법으로 함께 작업할 수 있다. 이로 인해 계층 모델(hierarchical model) 등 중앙집중 시스템에서는 할 수 없는 다양한 작업 방식(workflow)들을 사용해볼 수 있다.

http://git-scm.com/book/ko/v1

'tool > VersionControl' 카테고리의 다른 글

버전 넘버링 제안  (0) 2015.07.16
이름을 변경하고 뭔가 내용을 수정후 커밋할 경우 오류  (0) 2015.03.10
Ankh SVN  (1) 2012.08.21
블로그 이미지

란마12

,

 Visual Studio 2010 을 사용중 /MP 스위치를 사용 할 수 있다는것을 깜박하고 있다가 진행 중인 프로젝트에 적용을 시켜 보았다.

 

프로젝트 옵션 -> C/C++ -> 일반 -> 다중 프로세서 컴파일에 예(/MP ) 옵션을 켜고 컴파일 시작.

 

Gm 스위치와 호환이 안되므로 MP 를 무시한다고 나옴..

 

프로젝트 옵션 -> C/C++ -> 코드 생성 -> 최소 다시 빌드 가능 항목의 /Gm 옵션을 아니오 (/Gm-) 로 바꿔준 다음

 

다시 컴파일을 진행...

 

error C2813: /MP를 지정하면 #import를 사용할 수 없습니다.

 

으엌.. ㅠㅠ

 

프로젝트에서 사용중인 ADO dll 을 import 해서 사용중인데 MP 스위치와 import 옵션을 동시에 사용 할 수 없다고 MSDN 에서도 명확하게 말하고 있음..

 

그래도 난 쓰고 싶은데.. 그래서 찾아 봄.

 

#import 구문을 통해 사용하는 dll 은 COM 으로 이루어진 dll 이기 때문에 tlh 같은 Type Library Header 가 분명 생성이 됨

 

다음과 같은 과정을 거치면 import 구문을 빼고 include 구문으로 변경해서 MP 스위치를 사용 할 수 있다.

 

1. tlh 파일 추출하기

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF""adoEOF") rename("BOF""adoBOF")

 

구문을 그대로 두고 컴파일을 진행 한다.

 

컴파일이 성공하면 Object 파일들이 생성 되는 Debug 폴더 또는 Release 폴더로 가보자.

 

#import 처리기가 하는 역할이 dll 에서 tlh 를 추출하여 헤더 파일에 그대로 붙여 넣는 작업을 해주는 역할이기 때문에 Debug 폴더나 Release 폴더에 가보면 다음과 같은 파일이 보일것이다.

 

msado15.tlh

msado15.tli

 

각각 용량은 167KB, 146KB 정도로 꽤 큰편이다.

 

위 두파일을 복사해서 #import 구문을 사용했던 소스와 동일한 경로에 붙여넣기 한다.

 

#import ".........

코드를 다음과 같이 변경한다.

#include "msado15.tlh"

 

이렇게 하면 #import 로 추출된 tlh 파일을 include 하는 구조이기 때문에 동일한 역할을 수행한다.

 

/MP 스위치를 켜고 빌드 -> 솔루션 다시 빌드 를 선택하여 컴파일을 진행해 보면 또 컴파일 실패가 된다.

 

msado15.tlh(5025): fatal error C1083: 포함 파일을 열 수 없습니다. "....\msado15.tli': No such file or directory"

 

하지만 컴파일 오류 내용을 잘 보면 포함 파일을 열 수 없습니다. 라고 나오는것을 알 수 있기 때문에 tlh 파일 안에서 msado15.tli 파일을 찾을 수 없다 라는 오류를 알 수 있다.

 

msado15.tlh 파일을 메모장등의 에디터로 열어보자.

 

편집 -> 찾기 메뉴를 이용하요 .tli 를 찾아 보면 거의 끝부분에서 다음 줄을 찾을 수 있다.

 

//
// Wrapper method implementations
//

#include ".......\debug\msado15.tli"

 

 

앞 경로는 개인정보 보호상 삭제..

 

Full Path 로 된 #include  문을 찾을 수 있는데 바로 이 부분의 경로가 Debug 폴더까지 들어가 있어서 파일을 찾을 수 없는것으로 나오는것이다.

 

경로를 #import 문이 있는 소스의 경로로 수정한 다음 다시 한번 컴파일 해보면

 

제대로 컴파일 되는것을 확인 할 수 있다.

 

진행중인 프로젝트의 소스는 약 9500 라인의 C++ 소스이며 /MP 적용을 하지 않고 컴파일 하면

 

1:21초 정도의 컴파일 진행시간이 소요 된다.

 

/MP 적용후에는 31초로 시간이 단축 되는것을 확인 할 수 있으며

 

즉, 다음과 같다.

 

 /MP 적용 전 -> 1분 21초

 /MP 적용 후 -> 31초            약 260% 컴파일 속도 증가

 

다음과 같이 CPU 도 Full 로 사용하는것을 볼 수 있다.

 

 

 

다들 /MP 옵션을 이용해서 컴파일 시간을 줄여 보아요~~!


http://blog.acidpop.kr/96

블로그 이미지

란마12

,

Ankhsvn에서


이름을 변경하고 뭔가 내용을 수정후 커밋할 경우 오류가 발생한다.


... which is not part of the commit both sides of the move must be committed together ...


버그인지 모르겠으나 해결방법은 다음과 같다.


1. Repository에서 이름 변경전의 파일을 클라이언트로 복사한다.

2. 해당 파일을 솔루션에 추가후 커밋한다.

3. 해당 파일을 솔루션에서 제거후 커밋한다.

'tool > VersionControl' 카테고리의 다른 글

버전 넘버링 제안  (0) 2015.07.16
분산 버전 관리 시스템  (0) 2015.05.28
Ankh SVN  (1) 2012.08.21
블로그 이미지

란마12

,

1. 다운로드 7zsd.sfx

    http://7zsfx.solta.ru/en/


2. 설정파일 생성(예: config.txt)

    ;!@Install@!UTF-8!

    InstallPath="%Programfiles%\\7zzzz"

    GUIMode="2"

    ;!@InstallEnd@!


3. 명령창에서

    copy /b 7ZSD.sfx + config.txt + [7z압축파일명] [생성될설치파일명]



Use the above directions + additionally add the following to 'config.txt':

RunProgram="hidcon:setup.cmd"

Change 'setup.cmd' to whatever. If you don't run a batch file, then remove the 'hidcon:' part(it's used to hide the console window). You can run 'msi' files directly without using 'msistub.exe' or 'msiexec.exe' with this modified 7z SFX installer module(7ZSD.sfx). Btw, if you don't want a fixed extraction path and just want to use the temp folder, and also have the folder with the extracted files deleted afterwards, then remove the following from 'config.txt' :

InstallPath="x"


'tool' 카테고리의 다른 글

탐색기에서 현재 경로 커맨드창으로 열기  (0) 2014.04.23
doxygen  (0) 2011.12.06
crash dump  (0) 2011.11.11
WinDbg  (0) 2011.01.30
VC .Net에서 산출물(output/intermediate) 관리하기  (0) 2010.12.23
블로그 이미지

란마12

,


prompt-lvis.reg


'tool' 카테고리의 다른 글

7z 압축파일 자동풀기 실행프로그램 만들기  (0) 2014.10.17
doxygen  (0) 2011.12.06
crash dump  (0) 2011.11.11
WinDbg  (0) 2011.01.30
VC .Net에서 산출물(output/intermediate) 관리하기  (0) 2010.12.23
블로그 이미지

란마12

,

삽질 기록

tool/VS10 2013. 8. 19. 22:23

릴리즈 모드에서 다음과 같은 경고 발생 시 

/GL로 컴파일한 MSIL .netmodule 또는 모듈이 있습니다. /LTCG를 지정하여 링크를 다시 시작하십시오. /LTCG를 링크 명령줄에 추가하면 링커 성능이 향상됩니다.

프로젝트 속성 -> 구성 속성 -> 일반 -> 전체 프로그램 최적화: 링크 타임 코드 생성 사용 선택



라이브러리 디렉터리 설정방식이 두가지이다.

1. 구성속성 -> VC++ 디렉터리 -> 라이브러리 디렉터리

2. 링커 -> 일반 -> 추가 라이브러리 디렉터리(/LIBPATH)

솔루션안에 정적라이브러리 프로젝트와 EXE프로젝트가 같이 있을 때

EXE프로젝트들은 2번에 추가로 경로를 명시해주지 않으니 라이브러리 파일들을 찾지 못하는 현상이 발생



정적 라이브러리 쪽의 클래스: class __declspec(dllexport) A{...

응용프로그램 쪽의 클래스: class __declspec(dllimport) A{...

릴리즈모드에서 컴파일 시 error LNK2001: "__declspec(dllimport) public: __thiscall...  발생하여

두 프로젝트 모두 속성 -> 일반 -> 전체 프로그램 최적화: 전체 프로그램 최적화 안 함

으로 설정하니 오류 안남



프로젝트의 필터정보는 *.vcxproj.filters에 저장. 그냥  프로젝트파일(*.vcxproj)만 복사하면 필터정보가 누락되어 트리에서 헤더와 소스파일이 구분없이 통으로 나열됨.

디버그 설정 정보(실행인자 등)는 *.vcxproj.user에 저장. 이 파일은 SVN에서 관리되지 않음.


디버그 정보가 없는 것처럼 개체를 링크합니다. 경고 발생시

1. "구성 속성" -> "C/C++" -> "일반" -> "디버그 정보 형식" : "프로그램 데이터베이스(/Zi)"

2. "구성 속성" -> "C/C++" -> "코드 생성" -> "최소 다시 빌드 가능" : "아니요(/Gm-)"

3. "구성 속성" -> "C/C++" -> "명령줄" -> "추가 옵션"에 "/Ylsymbol"를 입력
4. "구성 속성" -> "C/C++" -> "일반" -> "전체 프로그램 최적화": "아니요"


블로그 이미지

란마12

,

Here is a simple way to make Visual Studio always launch as Administrator in Windows 8:

  1. Go to HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
  2. Add a String Valueand set its name to “C:\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\VSLauncher.exe”. Set its value to “RUNASADMIN”.
  3. Do the same again but use “C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe” as the name.
  4. Done! Now every time you start Visual Studio it runs as Administrator!

http://daniellang.net/always-run-visual-studio-as-administrator-in-windows-8/

블로그 이미지

란마12

,