CMAKE学习笔记
一、将build产生的exe文件和lib文件放到指定的目录中
方法1:
CMAKE中有两个变量用于指定输出文件的位置,通过设定这两个变量EXECUTABLE_OUTPUT_PATH和LIBRARY_OUTPUT_PATH的值指定exe文件和lib文件放置的目录,如
set(EXECUTABLE_OUTPUT_PATH <your_specified_path>)
set(LIBRARY_OUTPUT_PATH <your_specified_path>)
对于支持多个build配置(如Release,Debug等)的情况,CMAKE会为每一个配置生成一个子目录。根据当前使用的build配置,exe或lib文件实际上会被放置在<your_specified_path>/Debug或<your_specified_path>/Release中。
方法2:
通过设置target的属性ARCHIVE_OUTPUT_DIRECTORY,LIBRARY_OUTPUT_DIRECTORY和RUNTIME_OUTPUT_DIRECTORY为指定输出目录。对于多配置的generator,cmake会附加每个配置的子目录到指定输出目录。如果不希望将不同配置下生成的target放置到各自配置的子目录中,可以同时设置target的属性ARCHIVE_OUTPUT_DIRECTORY_<CONFIG>,LIBRARY_OUTPUT_DIRECTORY_<CONFIG>和RUNTIME_OUTPUT_DIRECTORY_<CONFIG>。上述属性分别作用于三种不同类型target的输出:可执行文件总是被作为RUMTIME target,静态库总是被作为ARCHIVE target,Module库总是被作为LIBRARY target,在Windows平台,shared library的DLL部分作为RUNTIME target,对应的Import library作为ARCHIVE target。如要输出所有配置的可执行target到${CMAKE_BINARY_DIR}/bin目录中,
set_target_properties(${target} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set_target_properties(${target} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/bin)
set_target_properties(${target} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/bin)
将产生的target放置在编译树的bin文件夹中。
方法3:
设置CMAKE_LIBRARY_OUTPUT_DIRECTORY、CMAKE_ARCHIVE_OUTPUT_DIRECTORY、CMAKE_RUNTIME_OUTPUT_DIRECTORY为指定目录,相应类型的target将输出到指定路径。CMAKE使用上述变量的值初始化对应的(方法二中)目标属性。对于多配置的generator,target将会输出到指定目录下配置子目录中。若不希望输出到配置子目录中,则需要设定相应配置的值,如CMAKE_ARCHIVE_OUTPUT_DIRECTORY_<CONFIG>。
参考资料:
cmake帮助文档
二、在target输出文件名后添加后缀
设置CMAKE_<CONFIG>_POSTFIX变量,CMAKE会在target输出文件名后添加后缀。如,通常将生成的库文件的Debug版添加后缀d,libAd.dll,Release版的输出文件为libA.dll。
set(CMAKE_DEBUG_POSTFIX "d")
三、为Debug和Release build链接不同的库
根据CMAKE的语法
target_link_libraries(<target> [lib1 [lib2 [...]]] [[debug|optimized|general] <lib>] ...)
其中debug,optimized和general指出紧接其后的库只用于对应的build类型。