如何在阿里云上做網(wǎng)站百度問答優(yōu)化
CMake筆記之CMAKE_INSTALL_PREFIX詳解以及ROS中可執(zhí)行文件為什么會(huì)在devel_lib中
code review!
文章目錄
- CMake筆記之CMAKE_INSTALL_PREFIX詳解以及ROS中可執(zhí)行文件為什么會(huì)在devel_lib中
- 1.`CMAKE_INSTALL_PREFIX`詳解
- 變量作用
- 設(shè)置 `CMAKE_INSTALL_PREFIX`
- 示例
- 影響范圍
- 常見用法
- 特別注意
- 總結(jié)
- 2.為什么我可以在這里找到我的可執(zhí)行文件:devel/lib/ros_templete_pub/ros_templete_pub
- 構(gòu)建目錄結(jié)構(gòu)
- 安裝目錄結(jié)構(gòu)
- 流程解釋
- 總結(jié)
1.CMAKE_INSTALL_PREFIX
詳解
CMAKE_INSTALL_PREFIX
是 CMake 中的一個(gè)重要變量,它定義了安裝路徑的前綴,決定了項(xiàng)目安裝目錄的根位置。理解和正確使用 CMAKE_INSTALL_PREFIX
對(duì)于控制軟件包的安裝位置非常重要,特別是在多項(xiàng)目構(gòu)建和部署環(huán)境中。
變量作用
CMAKE_INSTALL_PREFIX
決定了 make install
或 cmake --install
命令將項(xiàng)目文件安裝到哪個(gè)根目錄。默認(rèn)情況下,它的值通常是 /usr/local
,但可以根據(jù)需要進(jìn)行修改。
設(shè)置 CMAKE_INSTALL_PREFIX
可以在運(yùn)行 cmake
命令時(shí)通過命令行參數(shù)設(shè)置 CMAKE_INSTALL_PREFIX
,例如:
cmake -DCMAKE_INSTALL_PREFIX=/desired/install/path ..
或者在 CMakeLists.txt
中設(shè)置:
set(CMAKE_INSTALL_PREFIX "/desired/install/path" CACHE PATH "Install path prefix")
示例
假設(shè)有一個(gè)簡(jiǎn)單的 CMake 項(xiàng)目:
cmake_minimum_required(VERSION 3.0)
project(MyProject)add_executable(my_executable main.cpp)install(TARGETS my_executableRUNTIME DESTINATION bin)
如果運(yùn)行以下命令:
cmake -DCMAKE_INSTALL_PREFIX=/home/user/myproject_install ..
make
make install
那么 my_executable
會(huì)被安裝到 /home/user/myproject_install/bin
目錄中。
影響范圍
CMAKE_INSTALL_PREFIX
影響所有相對(duì)路徑的安裝目標(biāo)。例如,以下 CMake 語句:
install(TARGETS my_executable RUNTIME DESTINATION bin)
結(jié)合 CMAKE_INSTALL_PREFIX
,會(huì)將 my_executable
安裝到 ${CMAKE_INSTALL_PREFIX}/bin
目錄。
常見用法
-
默認(rèn)安裝路徑:
- 默認(rèn)值是
/usr/local
,適合系統(tǒng)全局安裝。
- 默認(rèn)值是
-
用戶本地安裝:
- 對(duì)于沒有管理員權(quán)限的用戶,可以將安裝路徑設(shè)為用戶的主目錄,例如
~/myproject_install
。
cmake -DCMAKE_INSTALL_PREFIX=~/myproject_install ..
- 對(duì)于沒有管理員權(quán)限的用戶,可以將安裝路徑設(shè)為用戶的主目錄,例如
-
自定義目錄:
- 在構(gòu)建環(huán)境中,可能需要將不同項(xiàng)目安裝到特定目錄中以避免沖突。
cmake -DCMAKE_INSTALL_PREFIX=/opt/myproject ..
特別注意
- CMake 緩存:
CMAKE_INSTALL_PREFIX
是一個(gè)緩存變量,如果修改了它,需要重新配置 CMake 或刪除CMakeCache.txt
文件以確保新值生效。 - 相對(duì)路徑: 如果給
CMAKE_INSTALL_PREFIX
賦值相對(duì)路徑,它會(huì)被解釋為相對(duì)于當(dāng)前構(gòu)建目錄的路徑。通常最好提供絕對(duì)路徑以避免混淆。
總結(jié)
CMAKE_INSTALL_PREFIX
是一個(gè)關(guān)鍵變量,用于指定項(xiàng)目的安裝根目錄。通過正確設(shè)置這個(gè)變量,可以靈活地控制項(xiàng)目的安裝位置,滿足不同的部署需求。無論是全局安裝、用戶本地安裝,還是特定目錄安裝,CMAKE_INSTALL_PREFIX
都能提供強(qiáng)大的支持。
2.為什么我可以在這里找到我的可執(zhí)行文件:devel/lib/ros_templete_pub/ros_templete_pub
使用
install(TARGETS ros_templete_pubRUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
在 ROS(機(jī)器人操作系統(tǒng))中,使用 Catkin 構(gòu)建系統(tǒng)時(shí),構(gòu)建過程中生成的文件通常會(huì)放置在 devel
目錄中。這是因?yàn)?Catkin 使用了兩個(gè)主要的構(gòu)建空間:devel
和 install
。下面解釋為什么會(huì)在 devel/lib/ros_templete_pub/ros_templete_pub
找到可執(zhí)行文件。
構(gòu)建目錄結(jié)構(gòu)
devel
目錄:- 該目錄是開發(fā)空間(development space),在這里構(gòu)建的文件可以直接使用而無需安裝。
- 運(yùn)行
catkin_make
或catkin build
時(shí),生成的可執(zhí)行文件和其他構(gòu)建產(chǎn)物會(huì)放置在devel
目錄下。 devel/lib
目錄通常包含構(gòu)建生成的可執(zhí)行文件,因?yàn)樵?ROS 中,lib 目錄不僅用于庫文件,也用于存放節(jié)點(diǎn)的可執(zhí)行文件。
安裝目錄結(jié)構(gòu)
install
目錄:- 該目錄是安裝空間(install space),通過執(zhí)行
catkin_make install
或catkin build --install
生成的文件會(huì)被安裝到這里。 install
目錄中的結(jié)構(gòu)由 CMakeinstall
命令決定,例如install(TARGETS ...)
語句。
- 該目錄是安裝空間(install space),通過執(zhí)行
流程解釋
-
構(gòu)建階段:
- 當(dāng)運(yùn)行
catkin_make
或catkin build
時(shí),CMake 會(huì)在devel
目錄中生成所有構(gòu)建產(chǎn)物。 - 可執(zhí)行文件通常會(huì)放置在
devel/lib/<package_name>/
目錄中。因此,會(huì)在devel/lib/ros_templete_pub/ros_templete_pub
找到的可執(zhí)行文件。
- 當(dāng)運(yùn)行
-
安裝階段:
- 如果運(yùn)行
catkin_make install
或catkin build --install
,CMake 會(huì)根據(jù)CMakeLists.txt
中的install
規(guī)則將文件安裝到install
目錄中。 - 例如,使用
install(TARGETS ros_templete_pub RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
會(huì)將ros_templete_pub
安裝到${CMAKE_INSTALL_PREFIX}/bin
,即通常為install/bin/
。
- 如果運(yùn)行
總結(jié)
在 devel/lib/ros_templete_pub/ros_templete_pub
找到可執(zhí)行文件是因?yàn)?#xff1a;
- 開發(fā)空間: 在構(gòu)建過程中,Catkin 默認(rèn)將可執(zhí)行文件放置在
devel
目錄中,以便可以立即運(yùn)行和測(cè)試這些文件,而無需執(zhí)行安裝步驟。 - 目錄結(jié)構(gòu):
devel/lib/<package_name>/
是 Catkin 默認(rèn)的可執(zhí)行文件輸出路徑。
如果需要將可執(zhí)行文件安裝到其他位置,請(qǐng)使用 catkin_make install
或 catkin build --install
,并確保在的 CMakeLists.txt
中正確配置了 install
命令。