CMake Запустить Встроенный Исполняемый Файл Перед Созданием Другого?
Как бы я сказал CMake построить и запустить исполняемый файл перед созданием другого? Поэтому у меня есть 2 исполняемых файла "a" и "b", где "a" требуется для запуска, чтобы генерировать файлы заголовков для "b". Таким образом," a " принимает 2 папки в качестве параметра, в котором он генерирует заголовочные файлы из xml-файлов из входного каталога в выходной каталог.
есть ли способ сказать CMake сделать это, а также узнать, когда XML-файлы изменяются или когда проект " a " изменяется для регенерации файлы?
1 ответов
если test1
строится test1.c
требуется предварительное выполнение test2
строится test2.c
, то решение должно выглядеть так:
-- test1.c --
#include <stdio.h>
int main(void) {
printf("Hello world from test1\n");
return 0;
}
-- условие_2.c --
#include <stdio.h>
int main(void) {
printf("Hello world from test2\n");
return 0;
}
-- CMakeLists.txt --
cmake_minimum_required(VERSION 2.8.11)
project(Test)
set(test1_SOURCES test1.c)
set(test2_SOURCES test2.c)
add_executable(test1 ${test1_SOURCES})
add_executable(test2 ${test2_SOURCES})
add_custom_target(test2_run
COMMAND test2
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "run generated test2 in ${CMAKE_CURRENT_SOURCE_DIR}"
SOURCES ${test2_SOURCES}
)
add_dependencies(test1 test2_run)
он генерирует следующий вывод:
alex@rhyme cmake/TestDep/build $ cmake ..
-- The C compiler identification is GNU 4.8.2
-- The CXX compiler identification is GNU 4.8.2
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/alex/tmp/cmake/TestDep/build
alex@rhyme cmake/TestDep/build $ make test1
Scanning dependencies of target test2
[ 25%] Building C object CMakeFiles/test2.dir/test2.c.o
Linking C executable test2
[ 25%] Built target test2
Scanning dependencies of target test2_run
[ 50%] run generated test2 in /home/alex/tmp/cmake/TestDep
Hello world from test2
[ 75%] Built target test2_run
Scanning dependencies of target test1
[100%] Building C object CMakeFiles/test1.dir/test1.c.o
Linking C executable test1
[100%] Built target test1
вам также может потребоваться использовать add_custom_command
и другие связанные директивы CMake, если ваша задача требует этого.