我不明白自己做错了什么。
每次我都得到字符串 "$<TARGET_FILE:tgt1>"
,而不是库的路径。
我创建了虚拟项目。
这是我的根CMakeLists.txt文件:
cmake_minimum_required (VERSION 3.0) # also tried 2.8 with the same result
set(PROJECT_NAME CMP0026)
add_subdirectory(src)
set(TGT_PATH $<TARGET_FILE:tgt1>)
message(STATUS "${TGT_PATH}")
这是我的src/CMakeLists.txt文件
add_library(tgt1 a.c)
文件 a.c
已创建并为空。
我尝试了以下生成器:Visual Studio 2013 Win64、Ninja 和 MingW Makefile。对于后两者,我使用了从 这里 下载的 Android 工具链。
我期望最后一个 message(STATUS
命令会打印出库文件的完整路径。然而,所有变体都打印出字符串 $<TARGET_FILE:tgt1>
。
file(GENERATE)
吗?它可以展开生成器表达式。 - Angew is no longer proud of SOfile(GENERATE)
可以完全替代;它不能。你可以通过正常运行文件来configure_file
,然后file(READ)
已配置的输出,并将其用作file(GENERATE)
的输入。或者用string(CONFIGURE)
替换中间文件配置步骤。 - Angew is no longer proud of SO