cmake add-custom-target不创建目标

tvz2xvvm  于 2023-01-13  发布在  其他
关注(0)|答案(1)|浏览(177)

我想构建一个包含文件列表(我的主任务使用的配置文件)的包,所以我将这些文件添加到我的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树了?否则它怎么知道新组件呢?

wyyhbhjk

wyyhbhjk1#

add_custom_target()的一个用例可能类似于Makefile中的. PHONY目标。
你需要给你的自定义目标添加依赖项,这样CMake就知道如何满足订单。

add_custom_target(libs DEPENDS library_1 library_2 ...)

因此,现在您有了一个目标libs,当您指定要构建的目标或其他目标依赖于要构建的libs时,它将构建您的库集。
另一个例子:

add_custom_target(unmount_server COMMAND "umount /mnt/deployment")

这将提供一个卸载服务器驱动器的目标。正如我所写的,这是一个非常不可移植的操作。

相关问题