我想在Makefile中看到你在下面看到的内容,但是使用cmake:
/// Makefile
all: main
header_moc.h : header.h
./mokker.sh header_moc.h
main : header_moc.h header.h
g++ main.cpp
文件内容如下:
/// header.h
void foo(){}
唯一的cpp:
/// main.cpp
#include "header.h"
#include "header_moc.h"
int main(int, char**){
return 0;
}
脚本生成虚拟_moc文件:
/// mokker.sh
touch $1
这是cmake文件:
/// CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(test)
macro(generate_file target name)
add_custom_command(
OUTPUT ${name}_moc.h
COMMAND ${CMAKE_SOURCE_DIR}/mokker.sh ${name}_moc.h
DEPENDS ${name}.h
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
add_custom_target(${target}_${name}_moc DEPENDS ${name}_moc.h)
add_dependencies(${target} ${target}_${name}_moc)
endmacro()
add_executable(test main.cpp header.h)
generate_file(test header)
答案 0 :(得分:0)
不,add_custom_target不是必需的。顺便说一下,你的CMakeLists.txt并不完全正确。
查看http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_generate_a_source_file_during_the_build.3F
正如您所看到的,程序源列表foo.c
中提到了生成的文件ADD_EXECUTABLE(foo foo.c)
,这就是为什么它会自动放入foo
依赖项列表中。< / p>