相关疑难解决方法(0)

CMake:将库链接到库

我有cmake的问题.我有,比方说,CMakeLists1有一个CMakeLists2所在的子目录.

在CMakeLists2中,我的目标是一个静态库.我想将它链接到外部库.我就这样做了:

link_directories ("path_to_library")
add_library (project2 ${sources})
target_link_libraries (project2 "name_of_external_lib")
Run Code Online (Sandbox Code Playgroud)

然后,我想在我的project1中使用这个project2中的一个类.我是这样做的:

add_executable (project1 ${sources})
target_link_libraries (project1 project2)
Run Code Online (Sandbox Code Playgroud)

但这根本不起作用.首先,project2没有链接到外部库.只是为了检查,我通过vs10项目属性添加了这个库,并且大小不同.第二件事,不知何故,project1看到了外部库(它在这个项目的库依赖项中),当然找不到它.

问题是什么?

cmake

18
推荐指数
1
解决办法
3万
查看次数

CMake:如何获取安装规则的目标位置

我有一个CMakeLists.txt可以做到这一点:

get_target_property(myloc mytarget LOCATION)
Run Code Online (Sandbox Code Playgroud)

它曾经可以正常工作,但是不建议使用CMake 3.0 LOCATION(请参阅https://cmake.org/cmake/help/v3.0/policy/CMP0026.html)。所以我尝试使用生成器表达式:

set(myloc $<TARGET_FILE:mytarget>)
Run Code Online (Sandbox Code Playgroud)

这似乎是可行的,除了生成器表达式不是在任何地方都被求值,它们似乎仅在设置其他目标的属性时起作用,并且在“生成”步骤而不是之前的“配置”步骤中得到解析。问题是,我需要知道install()规则中的目标位置,如下所示(实际用途并不重要,strip但这无关紧要):

install(CODE "execute_process(COMMAND strip ${myloc})")
Run Code Online (Sandbox Code Playgroud)

使用时可以很好地工作,LOCATION但是现在已经过时了,我想不通正确的方法。问题的根源似乎install()是在目标路径未知时在“配置”步骤中调用的。

如何在调用之前弥合这一差距,并像以前一样发现目标输出路径install()

cmake

6
推荐指数
1
解决办法
222
查看次数

标签 统计

cmake ×2