在cmake中将库链接为工具链文件中标志的一部分

时间:2019-08-30 10:45:06

标签: c++ gcc cmake cmake-format

我尝试将PROFILE添加到CMAKE_BUILD_TYPES。为此,我需要在工具链文件的-finstrument-functions中添加CMAKE_CXX_FLAGS,并通过target_link_libraries将所属库与CMakeLists.txt中的绝对路径链接。到目前为止,一切都很好,没有问题。

但是在刷新buildinformations时,cmake会检查编译器stil是否起作用。由于缺少所需的库,现在“无法编译简单的测试程序”,该库稍后在CMakeLists中链接。

因此,我评论了-finstrument-functions标志,并且可以编译testprogramm。

我试图: -使用-L -l将librarie和path设置为CXX标志的一部分:

  • 使用link_directories(<dir>)命令以及SET(CMAKE_LINK_DIRECTORIES_BEFORE <Path> )SET(CMAKE_LIBRARY_PATH <Path>)

  • 在工具链文件中设置变量,并稍后在cmakelist中调用它们:

SET(ADDITIONAL_PROFILE_LIBRARY  "$ENV{QNX_BASE}/target/qnx7/armle-v7/usr/liblibprofilingS.a")
SET(ADDITIONAL_PROFILE_FLAGS "-finstrument-functions")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" "${ADDITIONAL_PROFILE_FLAGS}")
add_executable(toolchainTester main.cpp)
target_link_libraries(toolchainTester ${ADDITIONAL_PROFILE_LIBRARY})

但是随后出现错误:mingw32-make.exe[3]: *** No rule to make target 'C:/qnx700/target/qnx7/armle-v7/usr/liblibprofilingS.a', needed by '../out/profileout'. Stop.

还有其他任何想法吗?预先感谢。

1 个答案:

答案 0 :(得分:0)

如果有人在寻找相同的解决方法,如何为不同的配置文件管理不同的标志和库,这是一种工作方式:

首先在工具链文件中设置变量

SET(ADDITIONAL_PROFILE_LIBRARY  "$ENV{QNX_BASE}/target/qnx7/armle-v7/usr/lib/libprofilingS.a")
SET(ADDITIONAL_CXX_FLAGS "-finstrument-functions")

呼叫/将其覆盖在CMakeLists.txt中

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" "${ADDITIONAL_CXX_FLAGS}")

add_executable(toolchainTester main.cpp)

target_link_libraries(toolchainTester ${ADDITIONAL_PROFILE_LIBRARY})