【发布时间】:2018-01-12 17:12:48
【问题描述】:
我正在尝试将我的 C++ 代码迁移到 Mac OSX 上的 CLion,但我是 CMake 的新手。我有一个 C++ 代码,它已经在 Eclipse 中测试并成功运行。特别是,我通过根据以下 Makefile 设置项目属性来创建 Eclipse 项目。
SYSTEM = x86-64_osx
LIBFORMAT = static_pic
CPLEXDIR = /Users/soheilmn/Applications/IBM/ILOG/CPLEX_Studio1271
CONCERTDIR = /Users/soheilmn/Applications/IBM/ILOG/CPLEX_Studio1271/concert
# ---------------------------------------------------------------------
# Compiler selection
# ---------------------------------------------------------------------
CCC = clang++ -O0
# ---------------------------------------------------------------------
# Compiler options
# ---------------------------------------------------------------------
CCOPT = -m64 -O -fPIC -fexceptions -DNDEBUG -DIL_STD -stdlib=libc++
# ---------------------------------------------------------------------
# Link options and libraries
# ---------------------------------------------------------------------
CPLEXBINDIR = $(CPLEXDIR)/bin/$(BINDIST)
CPLEXLIBDIR = $(CPLEXDIR)/lib/$(SYSTEM)/$(LIBFORMAT)
CONCERTLIBDIR = $(CONCERTDIR)/lib/$(SYSTEM)/$(LIBFORMAT)
CCLNDIRS = -L$(CPLEXLIBDIR) -L$(CONCERTLIBDIR)
CCLNFLAGS = -lconcert -lilocplex -lcplex -m64 -lm -lpthread -framework CoreFoundation -framework IOKit -stdlib=libc++
all:
make all_cpp
execute: all
make execute_cpp
CONCERTINCDIR = $(CONCERTDIR)/include
CPLEXINCDIR = $(CPLEXDIR)/include
CCFLAGS = $(CCOPT) -I$(CPLEXINCDIR) -I$(CONCERTINCDIR)
这是迄今为止我为 CMakeLists.txt 文件创建的内容。
cmake_minimum_required(VERSION 3.9)
project(SFCNF CXX)
set(CMAKE_CXX_STANDARD 11)
include_directories(/Users/soheilmn/Applications/IBM/ILOG/CPLEX_Studio1271/cplex/include)
include_directories(/Users/soheilmn/Applications/IBM/ILOG/CPLEX_Studio1271/concert/include)
set(CMAKE_CXX_FLAGS "-O0 -c -m64 -fPIC -DNDEBUG -DIL_STD -stdlib=libc++")
link_directories("/Users/soheilmn/Applications/IBM/ILOG/CPLEX_Studio1271/concert/lib/x86-64_osx/static_pic")
link_directories("/Users/soheilmn/Applications/IBM/ILOG/CPLEX_Studio1271/cplex/lib/x86-64_osx/static_pic")
add_executable(SFCNF "/Users/soheilmn/CLionProjects/SFCNF/main.cpp")
target_Link_Libraries(SFCNF "-lconcert -lilocplex -lcplex -m64 -lm -lpthread -framework CoreFoundation -framework IOKit -stdlib=libc++")
在 CLion 中,当我单击“构建”按钮时,我看到“构建目标 SFCNF”消息(带有许多警告)。但是,当我运行程序时,我看到以下消息:
“找不到文件:/Users/soheilmn/CLionProjects/SFCNF/cmake-build-debug/SFCNF”
谁能告诉我我在这里缺少什么?谢谢!
更新:我按如下方式编辑了我的 CMake 文件。
cmake_minimum_required(VERSION 3.9)
project(SFCNF CXX)
set(CMAKE_CXX_STANDARD 11)
add_executable(SFCNF main.cpp)
通过一个简单的 Hello World 程序,我的 C++ 代码现在可以在 CLion 中运行。但是,当我设置如下编译器选项时
cmake_minimum_required(VERSION 3.9)
project(SFCNF CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_FLAGS "-O0 -c -m64 -fPIC -DNDEBUG -DIL_STD -stdlib=libc++")
add_executable(SFCNF main.cpp)
CLion 会产生如下警告。
/Applications/CLion.app/Contents/bin/cmake/bin/cmake --build /Users/soheilmn/CLionProjects/SFCNF/cmake-build-debug --target SFCNF -- -j 2
[ 50%] Linking CXX executable SFCNF
clang: warning: -Wl,-search_paths_first: 'linker' input unused [-Wunused-command-line-argument]
clang: warning: -Wl,-headerpad_max_install_names: 'linker' input unused [-Wunused-command-line-argument]
clang: warning: CMakeFiles/SFCNF.dir/main.cpp.o: 'linker' input unused [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-O0' [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-fPIC' [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-D NDEBUG' [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-D IL_STD' [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-stdlib=libc++' [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-g' [-Wunused-command-line-argument]
[100%] Built target SFCNF
此外,现在如果我修改我的程序以打印另一条消息,CLion 会继续运行之前的 Hello World 程序,就好像我没有修改 main.cpp 文件中的任何内容一样。
【问题讨论】:
-
首先,不要使用绝对路径。应相对于 CMakeLists.txt 文件指定源文件。首先忽略额外的库并让它编译。然后尝试使用
find_package或find_library来查找您的依赖项。$ENV{HOME}可用于提示路径。 -
@John 谢谢!我只是不明白 CMake 如何在 CLion 中工作。现在,我只包含了“cmake_minimum_required(VERSION 3.9) project(SFCNF CXX), set(CMAKE_CXX_STANDARD 11) add_executable(SFCNF main.cpp)”,在 main.m 文件中,我有一个简单的 hello world 程序。它很好!然后我添加另一个命令 {set(CMAKE_CXX_FLAGS "-O0 -c -m64 -fPIC -DNDEBUG -DIL_STD -stdlib=libc++")} 产生警告。然后,我仍然可以运行代码,但 main.cpp 文件中的任何更改都将被忽略。这是否意味着如果有任何警告,CLion/CMake 不会构建? (感谢您对我的耐心!)
-
On Stack Overflow cmets 不适用于代码。用 current 问题更新您的问题帖子。并解释
but any change in the main.cpp file will be ignored的含义。 -
@Tsyvarev 谢谢我刚刚做到了。
-
这是一个类似的问题,答案非常有用。 stackoverflow.com/questions/58244727/…
标签: c++ macos makefile cmake clion