我想构建一个包含文件列表(我的主任务使用的配置文件)的包,所以我将这些文件添加到我的CMakeLists.txt中
add_custom_target(my-configs)
install(
FILES
file1.cfg
DESTINATION data/task
COMPONENT my-configs
EXCLUDE_FROM_ALL)
...
但是当我跑的时候:make -C ../cmake-build/linux_64_static_make_RelWithDebInfo/task/ my-configs
我得到:
make: Entering directory '/development/cmake-build/linux_64_static_make_RelWithDebInfo/task'
make: *** No rule to make target 'my-configs'. Stop.
为什么呢?上面不是应该创建目标吗?
- 编辑**
这个组件除了把文件复制到指定的位置之外什么都不做。在这种情况下,我还需要一个custom_target
吗?
或者我可以直接执行cmake install
吗?如果我安装了,我会看到:
cd ../cmake-build/linux_64_static_make_RelWithDebInfo && DESTDIR=../../cmake-install/linux_64_static_make_RelWithDebInfo cmake -DCOMPONENT=my_configs -P cmake_install.cmake
-- Install configuration: "RelWithDebInfo"
-- Install component: "my_configs"
但是没有任何东西像预期的那样被安装到DESTDIR中-这就是为什么我认为我需要一个目标,这样我就可以重新生成cmake-build树了?否则它怎么知道新组件呢?
1条答案
按热度按时间wyyhbhjk1#
add_custom_target()
的一个用例可能类似于Makefile中的. PHONY目标。你需要给你的自定义目标添加依赖项,这样CMake就知道如何满足订单。
因此,现在您有了一个目标
libs
,当您指定要构建的目标或其他目标依赖于要构建的libs
时,它将构建您的库集。另一个例子:
这将提供一个卸载服务器驱动器的目标。正如我所写的,这是一个非常不可移植的操作。