Если вы уже устанавливаете обязательные переменные include
и lib
, то, вероятно, все, чего не хватает:
set "cl=/DWNT /DCAD_STATIC"
, тогда вы сможете использовать
devenv project.sln /useenv /build
Обратите внимание, у вас также есть libpath
для установки путей поиска для библиотек, если это необходимо.
Ответы на дополнительные вопросы
- ДонНе знаю, как это сделать.
- Нет.Я не заметил, что вы делаете это в своем первоначальном вопросе - извините!LIB env var устанавливает пути поиска, в которых могут быть найдены библиотеки, это не полный путь к самой библиотеке.
То, чего вы пытаетесь достичь, это именно тот сценарий, при которомCMake превосходит.Вы боретесь с CMake здесь, когда это, вероятно, решение проблем: -)
На вашем месте я бы отредактировал CMakeLists.txt, добавив в него такие вещи, как:
SET(MY_ROOT <path to %myroot%>)
FIND_LIBRARY(GLEW_LIBRARY glew ${MY_ROOT}/glew/trunk/lib/Release)
IF(NOT GLEW_LIBRARY)
MESSAGE(FATAL_ERROR "glew.lib not found in ${MY_ROOT}/glew/trunk/lib/Release")
ENDIF()
FIND_LIBRARY(GLUT_glut_LIBRARY freeglut ${MY_ROOT}/freeglut/trunk/lib/Release)
IF(NOT GLUT_glut_LIBRARY)
MESSAGE(FATAL_ERROR "freeglut.lib not found in ${MY_ROOT}/freeglut/trunk/lib/Release")
ENDIF()
FIND_LIBRARY(MKL_LIBRARIES mkl_core ${MY_ROOT}/mkl/em64t/Release)
IF(NOT MKL_LIBRARIES)
MESSAGE(FATAL_ERROR "mkl_core.lib not found in ${MY_ROOT}/mkl/em64t/Release")
ENDIF()
INCLUDE_DIRECTORIES(${MY_ROOT}/OpenCascad)
ADD_DEFINITIONS(-DWNT -DCAD_STATIC)
TARGET_LINK_LIBRARIES(<your target>
${GLEW_LIBRARY}
${GLUT_glut_LIBRARY}
${MKL_LIBRARIES}
<any other libs...>
)
Это все для Windows и для конкретного релиза.Вы можете адаптировать вызовы FIND_LIBRARY
для обслуживания опций Unix / OSX или обернуть это в блоки IF(WIN32) ... ENDIF()
.
Вы также можете сделать FIND_LIBRARY
вызовы для версий Debug, если это необходимо (присваивая им разные имена переменных) и добавляя их, например:
TARGET_LINK_LIBRARIES(<your target>
optimized ${GLEW_LIBRARY}
optimized ${GLUT_glut_LIBRARY}
optimized ${MKL_LIBRARIES}
debug ${GLEW_LIBRARY_DEBUG}
debug ${GLUT_glut_LIBRARY_DEBUG}
debug ${MKL_LIBRARIES_DEBUG}
<any other libs...>
)
Вы также сможете удалять любые библиотеки из любых целей, которые хотите, изменяя список библиотек, передаваемых в вызове TARGET_LINK_LIBRARIES
(ы).
Если вы хотите получить все * .lib файлы в каталоге, добавьте что-то вроде этого:
FILE(GLOB ALL_GLEW_LIBS "${MY_ROOT}/glew/trunk/lib/Release/*.lib")
TARGET_LINK_LIBRARIES(<your target> ${ALL_GLEW_LIBS})
Если вы используете вызов GLOB
, а также вам нужна Debug и Release, обязательно добавьте к каждому элементу списка префикс debug
или optimized
, в зависимости от ситуации, например,
FOREACH(GLEW_ITR ${ALL_GLEW_LIBS_RELEASE})
SET(ALL_GLEW_LIBS ${ALL_GLEW_LIBS} optimized ${GLEW_ITR})
ENDFOREACH()
FOREACH(GLEW_ITR ${ALL_GLEW_LIBS_DEBUG})
SET(ALL_GLEW_LIBS ${ALL_GLEW_LIBS} debug ${GLEW_ITR})
ENDFOREACH()
TARGET_LINK_LIBRARIES(<your target> ${ALL_GLEW_LIBS})
Если все это затем обрабатывается CMake, вы ненеобходимо установить любые env vars в пакетном скрипте;Вы просто делаете:
devenv project.sln /build