[英]Use CMake add_custom_command to generate source for another target
我嘗試了這個虛擬的例子:
cmake_minimum_required( VERSION 2.8 )
project( testcmake )
add_custom_command(
OUTPUT testcmake.h
COMMAND xxd -i testcmake.txt testcmake.h
DEPENDS testcmake.txt
)
add_executable( testcmake testcmake.c testcmake.h )
#include <stdio.h>
#include "testcmake.h"
int main()
{
int i;
for ( i = 0 ; i < testcmake_txt_len ; i++ )
{
fputc( testcmake_txt[ i ] , stdout );
}
}
foo
bar
baz
它失敗了:
[...]
xxd: testcmake.txt: No such file or directory
[...]
添加WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
使一切正常但我不希望我的自定義命令的輸出出現在我的源目錄中,我希望所有中間文件都保留在CMake構建目錄中,就像任何非自定義規則一樣。
在執行xxd之前,需要將testcmake.txt復制到build文件夾。 您還需要將您的構建目錄添加到包含,以便#include "testcmake.h"
工作:
add_custom_command(
OUTPUT testcmake.h
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/testcmake.txt testcmake.txt
COMMAND xxd -i testcmake.txt testcmake.h
DEPENDS testcmake.txt
)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
使用CMake 3.2, file
獲得了一項新功能。 引用發布公告:
“file(GENERATE)”命令現在可以生成用作構建系統目標的源文件的文件。
也許這更容易使用,因為你可以切換到CMake 3.2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.