LINUX.ORG.RU

Разделение сборки

 , ,


0

1

Здравствуйте, имеется 3 файла: make.bat, CMaksList.txt, BuildEnvironment.bat(установка параметров среды). ********************************************* BuildEnvironment.bat : *********************************************

@echo off

rem ------ Programmer MUST set correct values for this variables ------

SET PRJ_ROOT=%CD%
SET INSTALL=%PRJ_ROOT%\INSTALL
SET MSVS10=%ProgramFiles%\Microsoft Visual Studio 10.0
SET WINDOWSSDK=%ProgramFiles%\Microsoft SDKs\Windows\v7.1
SET PATH=%PRJ_ROOT%;%PATH%

call "%MSVS10%\VC\vcvarsall.bat"

rem ------ Execute commandline

cmd.exe
********************************************* make.bat *********************************************
@echo off
set target=%1

if "%target%" == "" set target=install

if not exist build ( 
  mkdir build
  cd build
  echo Running configure and generate steps of CMake
  cmake -G "Visual Studio 10" -DCMAKE_INSTALL_PREFIX:PATH="%INSTALL%" .. 
) else (
  cd build
)

echo Building target %target%
cmake --build . --target %target%
cd ..

if "%target%" == "clean" (
 echo Removing build directory
 rd /s /q build 
 if exist build rd /s /q build
)
******************************************************* CMaksList.txt *******************************************************
cmake_minimum_required(VERSION 2.8)

project(CKATKernel)

set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})

set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")

if (MSVC10)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D_CRT_SECURE_NO_WARNINGS
  /D_CRT_NONSTDC_NO_DEPRECATE /Zc:wchar_t-")
endif (MSVC10)

ENABLE_TESTING()
INCLUDE(CTest)
if (MSVC60)
	find_package(DXSDK REQUIRED)
	find_package(PLATFORMSDK REQUIRED)
elseif (MSVC10)
	find_package(WINDOWSSDK REQUIRED)
endif (MSVC60)

include(cmake/Doxygen.cmake)
include(cmake/MC.cmake)
include(cmake/RPC.cmake)
include(cmake/AddVersion.cmake)
include(cmake/Install.cmake)

include_directories(include)
add_subdirectory(src)
if(NOT DISABLE_DOXYGEN)
	add_subdirectory(doxygen)
endif(NOT DISABLE_DOXYGEN)
add_subdirectory(utils)

Здесь осуществляется сборка проекта и документации. Хотелось бы разделись сборку. То есть командой make собирать только проект, а make doc только документацию. Думаю,что это реализуется с помощью изменения цели, но не получается(или нерпавильно думаю). Подскажите,что делать. Заранее спаибо!


С одной стороны, не понятно при чём тут эти .bat файлы, с другой - не приведено содержимое cmake/Doxygen.cmake и doxygen/CMakeLists.txt которые скорее всего как раз «при чём».

Вангую, что либо в Doxygen.cmake, либо в doxygen/CMakeLists.txt у вас есть директива add_custom_target(doc ...) которая запускает doxygen, и у неё есть параметр ALL, благодаря которому эта цель помимо `make doc' запускается и при просто `make'. Тогда вам надо просто убрать этот ALL.

slovazap ★★★★★ ()
Последнее исправление: slovazap (всего исправлений: 1)
Ответ на: комментарий от slovazap

********************************** Doxygen.cmake :

if(NOT DISABLE_DOXYGEN)
find_package(Doxygen)
endif(NOT DISABLE_DOXYGEN)
macro(doxygen TARGET)
if(NOT DISABLE_DOXYGEN)
 doxygen-mkdir-doxytags)
endif(NOT DISABLE_DOXYGEN)
endmacro(doxygen TARGET)
*********************************** Install.cmake
execute_process(COMMAND git log -1 --format=%h
                OUTPUT_VARIABLE BZR_REVNO_RAW
                WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})

STRING(REGEX REPLACE "\n" "" BZR_REVNO "${BZR_REVNO_RAW}")
				
execute_process(COMMAND cmd /C date /T
                OUTPUT_VARIABLE DATE_RAW)

STRING(REGEX REPLACE "\n" "" DATE "${DATE_RAW}")
				
execute_process(COMMAND cmd /C time /T
                OUTPUT_VARIABLE TIME_RAW)
				
STRING(REGEX REPLACE "\n" "" TIME "${TIME_RAW}")

configure_file(cmake/revision.txt.in ${CMAKE_BINARY_DIR}/revision.txt)

install(DIRECTORY include DESTINATION .)
install(FILES ${CMAKE_BINARY_DIR}/revision.txt DESTINATION .)

if (DOXYGEN_FOUND)
install(DIRECTORY ${CMAKE_BINARY_DIR}/doc/doxygen DESTINATION DOC)
endif (DOXYGEN_FOUND)
macro(install_library LIB)
  install(TARGETS ${LIB} 
          RUNTIME DESTINATION BIN
		  LIBRARY DESTINATION LIB
		  ARCHIVE DESTINATION LIB)
  if (EXISTS ${CMAKE_BINARY_DIR}/${LIB}.pdb)
    install(FILES ${CMAKE_BINARY_DIR}/${LIB}.pdb
            DESTINATION PDB
			CONFIGURATIONS Debug)
  endif (EXISTS ${CMAKE_BINARY_DIR}/${LIB}.pdb)
endmacro(install_library LIB)
******************************************** CMakeLists.txt doxygen'a
if (DOXYGEN_FOUND)
  set(DOXYGEN_OUTPUT "${CMAKE_BINARY_DIR}/doc/doxygen")
  configure_file(Doxyfile.in ${CMAKE_BINARY_DIR}/Doxyfile)

  add_custom_target(doxygen ALL
     COMMAND "${DOXYGEN_EXECUTABLE}"
             "${CMAKE_BINARY_DIR}/Doxyfile" 
     COMMENT "Writing documentation"
     WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})

  add_custom_target(doxygen-mkdir ALL
    COMMAND ${CMAKE_COMMAND} "-E" "make_directory" ${CMAKE_BINARY_DIR}/doc
    COMMAND ${CMAKE_COMMAND} "-E" "make_directory" ${CMAKE_BINARY_DIR}/doc/doxygen)

  add_dependencies(doxygen doxygen-mkdir)
endif (DOXYGEN_FOUND)

arfaa ()
Ответ на: комментарий от arfaa

Ну вон ваши add_custom_target с ALL. Я сказал что нужно делать.

slovazap ★★★★★ ()
Ответ на: комментарий от slovazap

просто убрать ALL или написать что-то вместо него?

arfaa ()
Ответ на: комментарий от arfaa

удалил ALL в двух add_custom_target файла CMakeLists.txt, но выдает ошибку MSB3073. И сразу же вопрос.Вот допусти убрав ALL у меня будет собираться все,кроме документации, где мне еще надо что-то поменять, чтобы при «make doc», наоборот собиралась только документация,а все остальное нет.

arfaa ()
Ответ на: комментарий от arfaa

CMakeLists.txt

add_custom_target(doxygen1
  COMMAND echo "doxygen1..."
)
add_custom_target(doxygen2
  COMMAND echo "doxygen2..."
)

add_custom_target(doc)
add_dependencies(doc doxygen1 doxygen2)
$ mkdir 1
$ pushd 1 >/dev/null
$ cmake .. >/dev/null 2>&1
$ make
$ make doc
Scanning dependencies of target doxygen1
doxygen1...
Built target doxygen1
Scanning dependencies of target doxygen2
doxygen2...
Built target doxygen2
Scanning dependencies of target doc
Built target doc

anonymous ()
Ответ на: комментарий от slovazap

Убрал ALL только в первом

add_custom_target(doxygen 
     COMMAND "${DOXYGEN_EXECUTABLE}"
             "${CMAKE_BINARY_DIR}/Doxyfile" 
     COMMENT "Writing documentation"
     WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
проект собирается нормально, но актуален вопрос,как собрать отдельно документацию?

arfaa ()
Ответ на: комментарий от arfaa

Вы издеваетесь? Имя цели написано в add_custom_target, ей и собрать.

slovazap ★★★★★ ()
option(BUILD_DOC "build documentation (default=off)" OFF)
if (BUILD_DOC)
    find_package(Doxygen)
    if (DOXYGEN_FOUND)
        .....
    endif()
endif()
imb ★★ ()
Ответ на: комментарий от slovazap

Мне кажется,что издеваетесь Вы.Вангую из своего первого сообщения цитата моя

Думаю,что это реализуется с помощью изменения цели, но не получается(или нерпавильно думаю).

Цитата вашего последнего сообщения:

Имя цели написано в add_custom_target, ей и собрать.

Это понятно и логично,но мне теории мало,я бы исходников сюда не кидал тогда.Вопрос: где конкретно находится имя этой цели?Я сам понимаю,что мне нужно изменить цель сборки,в теории все круто, но мне нужна конкретика. Убрав ALL,как писал я выше, собирается все кроме документации, но как собрать отдельно ее(где конкретно изменить цель и нужно ли что-то там изменять-удалять я не знаю,знал бы не писал бы тут). В любом случае спасибо Вам,так как вы единственный писали свои домыслы в этой теме

arfaa ()
Ответ на: комментарий от anonymous

Может я неправильно сформулировал :(. Итак,есть файл CMakeLists.txt,находящийся в каталоге doxygen/CMakeLists.txt. Я понял,что в нем есть команда add_custom_target. Если убрать опцию ALL,то собирается весь проект,кроме документации(то есть насколько я понимаю цель с именем doxygen не добавляется в общую цель). Я хочу найти общую цель, и не добавлять в нее все кроме doxygen(имя цели документации). Но где это находиться я не могу понять,ищу в корневом каталоге add_custom_target и нахожу только в том файле,который выложил выше. Я просто провожу аналогию с make'ом,может это неправильно конечно. Там в корневом файле makefile лежит allкуда мы включаем все проекты,если вводим в батнике make [имя проекта], то переходим в директорию этого проекта и там уже такой же мэйк файл,цель all состоящая уже из подпроектов и в конечном проекте уже конкретная инструкция для мэйка. Тут я ожидал увидеть что-то подобное,но увы. Где мне найти имя общей цели,если таковое имеется,куда помещаются все остальные? Я должен в doxygen/CMakeLists.txt отменять вставку других целей,крому документации или в каком-то другом месте?

arfaa ()
Ответ на: комментарий от arfaa

Честно говоря, помогать вам не особо хочется, потому что вы не умеете ни читать (ни код, ни документацию, ни ответы), ни писать (последний пост - бессмысленный набор слов). Но всё же попробую ещё раз:

add_custom_target(doxygen ...) создаёт цель doxygen, которую всегда можно запустить из сгенерированного makefile как, представьте себе, make doxygen и, соответственно, собрать документацию. И у этой add_custom_target есть параметр ALL при наличии которого к цели all сгенерированного makefile (она всегда генерируется) добавляется зависимость от цели doxygen, т.е. она добавляется в сборку по умолчанию. При наличии ALL просто `make' собирает и другие цели и документацию, при отсутствии - только другие цели. Документацию всегда можно собрать через `make doxygen'. Это ровно то что вы хотели в первом посте.

slovazap ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.