我目前正在使用递归make和autotools,并希望将一个项目迁移到CMake,它看起来像这样:
lx/ (project root)
src/
lx.c (contains main method)
conf.c
util/
str.c
str.h
etc.c
etc.h
server/
server.c
server.h
request.c
request.h
js/
js.c
js.h
interp.c
interp.h
bin/
lx (executable)
我该怎么做?
2条答案
按热度按时间ymdaylpp1#
如果在lx/src目录之上没有任何源代码,那么就不需要lx/CMakeLists.txt文件。如果有,它应该如下所示:
...其中的子目录是按照库依赖顺序添加的。不依赖于其他任何库的库应该首先添加,然后是依赖于其他库的库,依此类推。
lx/源文件/CMakeLists.txt
lx/源代码/实用程序/CMakeLists.txt
**文件名:
lx/源文件/服务器/CMakeLists.txt
然后,在命令提示符下:
默认情况下,lx可执行文件将使用此布局在“lx/bin/src”目录中结束。您可以使用RUNTIME_OUTPUT_DIRECTORY目标属性和set_property命令控制它结束的目录。
http://www.cmake.org/cmake/help/cmake-2-8-docs.html#prop_tgt:RUNTIME_OUTPUT_DIRECTORY
http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:set_property
如果库是通过add_library构建为CMake目标的,则通过CMake目标名称引用target_link_libraries库,否则通过库文件的完整路径引用。
另请参阅“cmake --help-command target_link_libraries”或任何其他cmake命令的输出,以及cmake命令的完整联机文档,可在以下位置找到:
http://www.cmake.org/cmake/help/cmake-2-8-docs.html#section_Commands
http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:target_link_libraries
5tmbdcev2#
Steinberg VST3库有一个可重用的方法,该方法递归循环遍历子目录,并在子目录中包含CMakeLists.txt文件时添加子目录:
https://github.com/steinbergmedia/vst3_cmake/blob/master/modules/SMTG_AddSubDirectories.cmake