2012-05-14 2 views
0

우리는 Visual Studio 2008 용 솔루션 파일을 생성하기 위해 CMake를 사용하고 있습니다. 라이브러리와 실행 파일을 빌드하는 일반적인 소스 프로젝트 외에도 구성 파일 만 포함하는 프로젝트를 만들고 싶습니다. 이러한 파일은 런타임에 프로젝트의 동작을 구성하는 데 사용됩니다. 프로젝트를 빌드하는 데 필요하지 않지만 솔루션에 포함 시키면 해당 파일을 편리하게 편집 할 수 있습니다. 그래서 같이 사용하여이 add_custom_target을 달성 할 수 있었다 :CMake가 구성 파일 만 포함하는 Visual Studio 프로젝트를 만드는 방법은 무엇입니까?

file(GLOB ini_files ${PROJECT_SOURCE_DIR}/../config/ini/*) 
source_group(ini FILES ${ini_files}) 
file(GLOB xml_files ${PROJECT_SOURCE_DIR}/../config/xml/*) 
source_group(xml FILES ${xml_files}) 
add_custom_target(config SOURCES ${ini_files} ${xml_files}) 

이 나에게 하위 폴더로 구성 파일을 포함하는 "설정"프로젝트를 제공합니다. 그러나 존재하지 않는 파일에 "config"라는 링크가 있습니다. 이 규칙에 의해 생성 된 타겟에 대한 링크라고 가정합니다. 건설 할 것이 없기 때문에 이것은 죽은 연결로 남아있을 것입니다. 이제 내 질문은 다음과 같습니다.

  1. 내가 원하는 것을 달성하기위한 올바른 방법은 add_custom_target입니까? 그렇지 않은 경우 더 나은 해결책은 무엇입니까?
  2. 올바른 방법이라면 어떻게 대상 이름에 대한 링크를 제거 할 수 있습니까? 또한, "CMake 규칙"폴더를 제거하여 구성 프로젝트를 가능한 한 깨끗하게 만들고 싶습니다.

답변

2

Visual Studio 프로젝트는 원본 파일 집합에 따라 대상을 빌드하기 위해 기본적으로 만들어집니다.

정적 파일을 나열하는 것만으로 프로젝트를 만드는 것은 권장하지 않습니다. 사용자 지정 대상을 추가하자 마자 CMake는 다른 프로젝트와의 호환성을 유지하기 위해 맹목적으로 프로젝트 출력을 시도합니다 백엔드 시스템. CMake가 실제 대상이없는 Unix Makefile을 만들었습니까? Makefile이 아닐 수도 있습니다.

이 작업을 수행하는 적절한 방법은 파일을 다른 기존 프로젝트에 실제로 추가하는 것입니다. 기술적으로 말하자면, 실행 파일을 빌드하고이 실행 파일이 런타임에 구성 파일을 읽으면이 파일은 합법적으로 프로젝트의 일부입니다.

또한 파일 글로핑을 사용하여 소스 파일이나 구성 파일을 나열하는 것은 좋지 않습니다. 왜냐하면 폴더에 파일을 추가하면 CMake는 새 파일이 추가되었는지 알 수 없으므로 Visual Studio 프로젝트 해당 파일을 포함하도록 다시 생성되지 않습니다. 대신 CMakeLists.txt 파일의 모든 파일을 나열해야합니다. 그러면 새 파일을 추가하면 cmake 파일 재생성이 트리거됩니다.

"깨끗한"프로젝트가 정말로 필요하다면 CMake는 필요한 도구가 아닙니다. 왜냐하면 생성 된 모든 것이 일관된 빌드 프로세스를 유지하는 데 유용하기 때문입니다.

+0

이 통찰력있는 답변에 감사드립니다. 기존 프로젝트에 파일 추가하기. 그러나 문제는 프로젝트가 실제로 프로젝트 외부의 프레임 워크에서 사용되는 모듈 (동적 라이브러리, dll 또는 기타 파일)을 빌드한다는 것입니다. 어쩌면 config 파일을 자신이 속한 모듈에 넣을 수도 있습니다. 일부는 여러 번 사용됩니다. 모듈을 사용하도록 프레임 워크를 구성하는 파일도 있으므로 모듈에 의해 읽혀지지 않습니다. Unix Makefiles의 경우 유용하지는 않지만이 프로젝트의 유일한 목적은 설정 파일을 VS에 추가하는 것입니다. – ahans

+0

@ahans 아무것도 여러 프로젝트에 파일을 포함하지 못하게하지 마십시오. 파일이 복제되지 않으므로 오버 헤드가 최소화됩니다. – SirDarius

+0

흥미로운 점. 이것은 프레임 워크를 구성하는 파일의 문제를 해결하지 못합니다. 나는 확실히 염두에 두었습니다. 어느 시점에서 유용 할 수도 있습니다. 지금은'add_library'를 사용하여 이것을 해결했습니다; 이것은 내가 원했던 것과 똑같습니다. – ahans

관련 문제