Я пытаюсь перенести проект * nix, CMake на Windows. Один файл заголовка, необходимый основной библиотеке, генерируется специальной программой, поэтому файл CMakeLists.txt
содержит примерно следующее:
add_executable(TableGenerator "TableGenerator.cpp")
target_link_libraries(TableGenerator ${LibFoo_LIBRARY})
add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/Table.h"
COMMAND TableGenerator "${CMAKE_CURRENT_BINARY_DIR}/Table.h"
DEPENDS TableGenerator)
Важная деталь: TableGenerator
использует внешнюю общую библиотеку LibFoo
. Например, в Linux все работает отлично, потому что libfoo.so
установлен в одной из каталогов системных библиотек, таких как /usr/local/lib
, или CMake даже устанавливает атрибут rpath в исполняемый файл, говоря, где именно найти библиотеку.
Однако в Windows эти библиотеки обычно не устанавливаются в систему, а скорее просто извлекаются или компилируются в какой-либо произвольный каталог в дереве сборки или рядом с ним. Чтобы запустить TableGenerator
, foo.dll
должен быть доступен или скопирован в один из Порядок поиска библиотеки Dynamic-Link (скажем %WINDIR%\System32
или каталог вывода сборки для TableGenerator
), что нежелательно.
Как я могу установить переменную среды PATH
для пользовательской команды, т.е. использоваться не во время запуска CMake, но во время выполнения пользовательской сборки?