Добрый день!

Есть такой CMakeLists.txt

cmake_minimum_required(VERSION 3.10)

find_package(Hg)
if (HG_FOUND)
message("HG found"
HG_WC_INFO(${PROJECT_SOURCE_DIR} prj1)
set (SHORT_CHANGESET ${prj1_WC_REVISION})
set (HEX 0x)
set (LONG_CHANGESET ${HEX}${prj1_WC_CHANGESET})
message("Changeset: " ${SHORT_CHANGESET})
message("Number: " ${LONG_CHANGESET})
add_compile_options(-DSHORT_CHANGESET=${SHORT_CHANGESET}
-DLONG_CHANGESET=${LONG_CHANGESET})
endif()

add_subdirectory(prj2)
add_subdirectory(prj3)

И, соответственно, в директории prj2 CMakeLists.txt

cmake_minimum_required(VERSION 2.6)
set (SOURCES cpp1.cpp cpp2.cpp cpp1.def)
set (SHORT_CHANGESET "" CACHE STRING "Mercurial short changeset"
set (LONG_CHANGESET "" CACHE STRING "Mercurial long changeset"
add_library(HardwareInterface SHARED ${SOURCES})
add_definitions(/DSHORT_CHANGESET=${SHORT_CHANGESET} /DLONG_CHANGESET=${LONG_CHANGESET})
add_definitions(/MT)

Где-то в недрах cpp1.cpp SHORT_CHANGESET и LONG_CHANGESET используются.

Так вот, компилируется все это только при условии, что cmake запускается два раза - после первого запуска ошибки раскрывания макросов, а после второго - все ОК.

Я не автор кода, только собираю его. В чем причина такого поведения cmake?








 ,






URL записи