13

我希望 CMake 为我制定安装规则,这些规则也会自动安装配置和其他东西。我看了这个问题,但补充说:

add_executable(solshare_stats.conf solshare_stats.conf)

到我的 CMakeLists.txt 文件只给了我警告和错误:

CMake Error: CMake can not determine linker language for target:solshare_stats.conf
CMake Error: Cannot determine link language for target "solshare_stats.conf".
...
make[2]: *** No rule to make target `CMakeFiles/solshare_stats.conf.dir/build'.  Stop.
make[1]: *** [CMakeFiles/solshare_stats.conf.dir/all] Error 2
make: *** [all] Error 2

如何将配置、初始化和/或日志文件添加到 CMake 安装规则?

这是我完整的 CMakeLists.txt 文件:

project(solshare_stats)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST} )
add_executable(solshare_stats.conf solshare_stats.conf)
target_link_libraries(solshare_stats mysqlcppconn)
target_link_libraries(solshare_stats wiringPi)
if(UNIX)
    if(CMAKE_COMPILER_IS_GNUCXX)
        SET(CMAKE_EXE_LINKER_FLAGS "-s")
        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wall -std=c++0x")
    endif()
    install(TARGETS solshare_stats DESTINATION /usr/bin COMPONENT binaries)
    install(TARGETS solshare_stats.conf DESTINATION /etc/solshare_stats COMPONENT config)
endif()
4

1 回答 1

16

.conf 文件应该包含在add_executable您定义可执行目标的位置,而不是单独的调用中:

add_executable(${PROJECT_NAME} ${SRC_LIST} solshare_stats.conf)


然后你需要使用install(FILE ...)而不是install(TARGET ...)

install(TARGETS solshare_stats DESTINATION /usr/bin COMPONENT binaries)
install(FILES solshare_stats.conf DESTINATION etc/solshare_stats COMPONENT config)


通过做

add_executable(${PROJECT_NAME} ${SRC_LIST})
add_executable(solshare_stats.conf solshare_stats.conf)

您是说要创建 2 个可执行文件,一个称为“solshare_stats”,另一个称为“solshare_stats.conf”。

第二个目标的唯一源文件是实际文件“solshare_stats.conf”。由于此目标中的所有源文件都没有后缀来说明语言(例如“.cc”或“.cpp”暗示 C++,“.asm”暗示汇编),因此无法推断出任何语言,因此 CMake错误。

于 2013-06-29T16:05:17.097 回答