【发布时间】:2017-10-14 14:14:33
【问题描述】:
我正在尝试创建一个仅将库复制到 LIBRARY_OUTPUT_PATH 的自定义目标。下面是我的 CMakeLists.txt。
MYCOMPONENT文件夹的内容是mylib.so和CMakeLists.txt。
cmake_minimum_required(VERSION 2.8)
project( MYCOMPONENT )
add_custom_target( MYTARGET
COMMAND ${CMAKE_COMMAND} -E copy ./mylib.so ${LIBRARY_OUTPUT_PATH} )
我执行以下操作:
cd MYCOMPFOLDER
mkdir build_debug
cd build_debug
cmake -DLIBRARY_OUTPUT_PATH=<mycompfolderfullpath>/build_debug/bin ..
现在我执行 build_debug 的 ls 并得到:
CMakeCache.txt CMakeFiles cmake_install.cmake Makefile
ls CMakeFiles/
3.5.1 CMakeTmp Makefile2
cmake.check_cache feature_tests.bin Makefile.cmake
CMakeDirectoryInformation.cmake feature_tests.c progress.marks
CMakeOutput.log feature_tests.cxx TargetDirectories.txt
CMakeRuleHashes.txt MYCOMPONENT.dir
ls CMakeFiles/MYCOMPONENT.dir/
build.make cmake_clean.cmake DependInfo.cmake progress.make
从 build_debug 中,“find . -name mylib.so”不存在,所以“make MYTARGET”当然会失败。如何让 cmake 正确处理 mylib.so?这是第三方库,我们不构建它,目标是确保将其从该文件夹复制到 LIBRARY_OUTPUT_PATH,以便其他组件可以从那里链接到它。
【问题讨论】:
-
如果我理解正确,复制失败,因为构建目录中没有
mylib.so。显然,您需要指定正确的文件路径才能成功复制。 什么是问题? 你问mylib.so在你的机器上的位置吗?只有你自己知道。 -
在进行源外树构建时,cmake 将文件从源文件夹复制到新树 - mylib.so 不会被复制,只有 CMakeLists.txt 文件。这就是我要问的。为什么不像我的工作区中的所有其他文件一样将它复制到源树外路径中。我知道文件在哪里,如果这是正常的 cmake 行为,那么我将复制 ../mylib.so (相对于 build_debug 文件夹),但源树外构建似乎并不奇怪复制这个文件。它不是源代码树中唯一的二进制文件——我们也预编译了着色器。
-
你错了:nothing会自动从source tree复制到binary tree。仔细看:构建树中没有
CMakeLists.txt。在任何情况下,如果您想将mylib.so复制到其他位置,只需从源代码树 (${CMAKE_SOURCE_DIR}/mylib.so) 复制即可。
标签: cmake