我认为,一个例子是证明我的问题的最佳方式:
可以说我有一个名为src的源目录。 此目录下有两个文件,一个文件的CMakeLists.txt和一个名为等等Python文件。 在SRC存储在同一个地方,有一个名为build文件夹。 现在,我想能够运行cmake并使其编译我的Python文件等等,并把它变成我的build目录。 目前,我的CMakeLists.txt只是复制未编译代码,直入我的生成目录使用呼叫:
CONFIGURE_FILE(${PATH_TO_SOURCE}/blah.py ${PATH_TO_BUILD}/blah.py COPYONLY)
然后,我让运行在终端编译实际的文件。 这使得未编译Python文件在我的生成目录,这是没有好处的。 我已经使用ADD_EXECUTABLES,创建一个自定义的目标,并使用COMMAND试过,但我的语法必须某处关闭。 任何帮助将不胜感激!
CMake的不支持Python的开箱即用的,据我所知。 正因为如此,你需要编写规则来构建Python的文件,这样的事情:
macro(add_python_target tgt)
foreach(file ${ARGN})
set(OUT ${CMAKE_CURRENT_BINARY_DIR}/${file}.pyo)
list(APPEND OUT_FILES ${OUT})
add_custom_command(OUTPUT ${OUT}
COMMAND <python command you use to byte-compile .py file>)
endforeach()
add_custom_target(${tgt} ALL DEPENDS ${OUT_FILES})
endmacro()
定义后,就可以使用这种方式:
add_python_target(blabla blah.py)
如果你想adjustmenets或需要了解更多信息,请参阅CMake的文档 。