这是 cmake 相关问题 尝试构建项目,并在构建计算机上遇到默认 clang-3.5 的问题,因此在那里安装了 clang-3.7 。不幸的是它没有 clang 符号链接,所以我不得不找到它。
将这些行放在 CMakeLists.txt 文件中以检测clang并设置它(我知道这不是很好看的查找代码)
# Complilers, NOTE: this section should be before the Project section
find_program( CLANG_PATH clang )
find_program( CLANGCXX_PATH clang++ )
if(NOT CLANG_PATH AND NOT CLANGCXX_PATH)
set (CLANG_SEARCH_PATH "/usr/bin/")
execute_process(COMMAND bash "-c" "ls ${CLANG_SEARCH_PATH} | grep -v clang++ | grep clang | head -1"
OUTPUT_VARIABLE CLANG_FILE )
execute_process(COMMAND bash "-c" "ls ${CLANG_SEARCH_PATH} | grep clang++ | head -1"
OUTPUT_VARIABLE CLANGCXX_FILE )
if(CLANG_FILE AND CLANGCXX_FILE)
set(CLANG_PATH "${CLANG_SEARCH_PATH}${CLANG_FILE}")
set(CLANGCXX_PATH "${CLANG_SEARCH_PATH}${CLANGCXX_FILE}")
set(CMAKE_C_COMPILER "${CLANG_PATH}")
message(STATUS "The clang compiler discovered... ${CLANG_PATH}")
set(CMAKE_CXX_COMPILER "${CLANGCXX_PATH}")
message(STATUS "The clang++ compiler discovered... ${CLANGCXX_PATH}")
else()
message(FATAL_ERROR "clang and clang++ were not found! Aborting...")
endif()
endif()
构建结果(对于clang ++来说是相同的)
-- The clang compiler discovered... /usr/bin/clang-3.7
-- The clang++ compiler discovered... /usr/bin/clang++-3.7
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:24 (project):
The CMAKE_C_COMPILER:
/usr/bin/clang-3.7
is not a full path to an existing compiler tool.
Tell CMake where to find the compiler by setting either the environment
variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
the compiler, or to the compiler name if it is in the PATH.
但这条道路似乎是正确的。 如果我将以虚拟的方式设置它,比如
set(CMAKE_C_COMPILER "/usr/bin/clang-3.7")
set(CMAKE_CXX_COMPILER "/usr/bin/clang++-3.7")
它有效
-- The C compiler identification is Clang 3.7.0
-- The CXX compiler identification is Clang 3.7.0
-- Check for working C compiler: /usr/bin/clang-3.7
-- Check for working C compiler: /usr/bin/clang-3.7 -- works
PS:我看到了这一个CMAKE_C_COMPILER is not a full path to an existing compiler tool但是它没有用。但是保留了相同的主题名称。
UPD:
$cmake --version
cmake version 3.6.2
答案 0 :(得分:2)
当根据execute_process
的输出形成某个变量的内容时,请注意大多数shell实用程序和程序将换行符添加到其输出中(这是为终端中的漂亮视图完成的)
要删除此换行符,可以使用CMake命令string(STRIP)。
答案 1 :(得分:0)
如果导出编译器路径,则可以解决这些错误。 例如:export PATH = $ PATH:/
请注意,大多数人在编译应用程序时都犯了一个错误。 在用户模式下设置的环境变量,但是在编译应用程序时,用户可能会保留sudo(这是行不通的,因为当您传递sudo时,它将用户终端更改为sudo用户。因此,无论在用户模式下设置的哪个环境变量都没有因此,如果要使用sudo编译应用程序,则直接进入sudo模式,然后导出环境变量,它应该可以工作。)