谢谢各位! 如题,假设
add_executable(dense_mapping src/dense_mapping.cpp)
怎么可以让dense_mapping
这个二进制文件输出到指定目录?有类似set_property
之类的吗?EXECUTABLE_OUTPUT_PATH
是全局的,并不想这样.
1
yuikns 2019-05-21 15:09:34 +08:00
|
2
codechaser OP @yuikns 不是,我是指编写边编译测试的时候能不能修改这个文件的默认输出目录.不过 install 好像确实这样诶,我去试试.
|
3
codechaser OP @yuikns 请教一下为啥 cmake 和 make 之后生成的可执行文件可以正常运行,一但 make install 之后到对应目录里去运行就会显示找不到 so?
|
4
capric 2019-05-21 16:04:19 +08:00 1
set_target_properties(
dense_mapping PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/../../rundir" ) ${CMAKE_BINARY_DIR} 是默认输出位置 |
5
capric 2019-05-21 16:06:18 +08:00
改输出名字也是可以的
if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(suffix "64") else() set(suffix "32") endif() # set_target_properties(${name} PROPERTIES OUTPUT_NAME "dense_mapping${suffix}") |
6
codechaser OP @capric 你好,能解答一下我上面问的问题吗?make install 之后就找不到 so 了
|
7
codehz 2019-05-21 20:27:12 +08:00
install 后找不到 so 可能是 RPATH 的问题,由于不清楚你的具体情况,你可以自己去谷歌以下关键词:cmake rpath
|
8
LouisLiu 2019-05-21 20:50:00 +08:00 via iPhone
set(cmake_install_prefix "/home/")可以
|
9
secondwtq 2019-05-21 21:15:00 +08:00
我也想到 install,不过看帖子之后觉得不如你 CMakeLists 里面加条命令直接复制算了,install 是发布出去之后给用户部署用的,不应该有那么多开发者个人乱七八糟的需求掺在里面
另外其实更合适的是在对应目录下建个 symlink 指向默认输出位置 |
10
Hconk 2019-05-21 23:31:09 +08:00 via iPhone
找不到 so 可以用,readelf -d ./dense_mapping 或者 ldd 命令在你 install 和不用 install 时候做下对比就知道为什么缺少 so 了,一般就是楼上说的 rpath 路径里面估计是相对路径,换个位置就找不到 so 了,可以在 rpath 个 . (当前目录) ,然后 install 的时候把.so 和目标程序一起 install 到同一个文件夹就行了。
|
11
qieqie 2019-05-22 10:39:15 +08:00
https://cmake.org/cmake/help/v3.10/command/file.html
FILE(COPY xxx DESTINATION xxx) install 后会默认把 rpath 置空,所以要把 install 的路径加到 path 里,或者 SET(CMAKE_INSTALL_RPATH "") |
12
codechaser OP @Hconk 昨天发现 install 之后的二进制用 LD_DEBUG=libs 看了一下,发现一些库没找,我到 /etc/ld.conf.d 里面加了个文件,然后 sudo ldconfig 就好了。
|
13
codechaser OP @Hconk 而且我用的 so 不是相对路径,是另一个版本的 opencv,我安装到了 /opt 下面
|
14
codechaser OP @secondwtq 这个办法好!我竟然没想到,多谢。
|